Verwenden von System.Transactions in ASP.NET

In diesem Thema wird beschrieben, wie Sie System.Transactions in einer ASP.NET-Anwendung erfolgreich verwenden können.

Aktivieren von DistributedTransactionPermission in ASP.NET

System.Transactions unterstützt teilweise vertrauenswürdige Aufrufer und wird mit dem AllowPartiallyTrustedCallers-Attribut (APTCA) markiert. Die Vertrauensebenen für System.Transactions werden auf der Basis der Ressourcentypen (beispielsweise Systemspeicher, freigegebene prozessübergreifende Ressourcen, systemweite Ressourcen und andere Ressourcen) definiert, die System.Transactions verfügbar macht, und auf der Basis der Vertrauensebene, die erforderlich sein soll, um auf diese Ressourcen zuzugreifen. In einer teilweise vertrauenswürdigen Umgebung kann eine nicht vollständig vertrauenswürdige Assembly Transaktionen nur innerhalb der Anwendungsdomäne nutzen (in diesem Fall ist die einzige geschützte Ressource der Systemspeicher), sofern ihr nicht die DistributedTransactionPermissionerteilt wird.

DistributedTransactionPermission wird immer dann gefordert, wenn die Transaktionsverwaltung eskaliert wird, um vom Microsoft Distributed Transaction Coordinator (MSDTC) verwaltet zu werden. Diese Art des Szenarios verwendet prozessübergreifende Ressourcen und insbesondere eine globale Ressource, bei der es sich um den reservierten Speicherplatz im MSDTC-Protokoll handelt. Ein Beispiel für diese Verwendung ist das Web-Front-End einer Datenbank oder Anwendung, die eine Datenbank nutzt, die zu den von ihr bereitgestellten Diensten gehört.

ASP.NET verfügt über einen eigenen Satz Vertrauensebenen und ordnet diesen Vertrauensebenen über Richtliniendateien einen spezifischen Satz Berechtigungen zu. Weitere Informationen finden Sie unter ASP.NET-Vertrauensebenen und Richtliniendateien. Wenn Sie das Windows-SDK installieren, werden keine der ASP.NET-Standardrichtliniendateien der DistributedTransactionPermission zugeordnet. Wenn Ihre Transaktion in einer ASP.NET-Anwendung eskaliert wird, um vom MSDTC verwaltet zu werden, schlägt die Eskalation mit einer SecurityException fehl, sobald die DistributedTransactionPermission angefordert wird. Um die Transaktionseskalation in einer teilweise vertrauenswürdigen ASP.NET-Umgebung zu ermöglichen, müssen Sie die DistributedTransactionPermission auf denselben Vertrauensebenen erteilen wie SqlClientPermission. Sie können entweder Ihre eigene benutzerdefinierte Vertrauensebene und Richtliniendatei konfigurieren, um die Eskalation zu ermöglichen, oder die Standardrichtliniendateien Web_hightrust.config und Web_mediumtrust.configändern.

Um die Richtliniendateien zu ändern, fügen Sie ein SecurityClass-Element für DistributedTransactionPermission dem SecurityClasses-Element unterhalb des PolicyLevel-Elements hinzu, und fügen Sie ein entsprechendes IPermission-Element unterhalb des ASP.NET NamedPermissionSet für „System.Transactions“ hinzu. Die folgende Konfigurationsdatei veranschaulicht dies.

<SecurityClasses>
   <SecurityClass Name="DistributedTransactionPermission" Description="System.Transactions.DistributedTransactionPermission, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
...
</SecurityClasses>

<PermissionSet
  class="NamedPermissionSet"
  version="1"
  Name="ASP.Net">
     <IPermission
        class="System.Transactions.DistributedTransactionPermission, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        version="1"
        Unrestricted="true"
     />
...
</PermissionSet>

Weitere Informationen zur ASP.NET-Sicherheitsrichtlinie finden Sie unter securityPolicy-Element (ASP.NET-Einstellungsschema).

Dynamische Kompilierung

Wenn Sie System.Transactions zur Verwendung in eine ASP.NET-Anwendung importieren möchten, die bei Zugriff dynamisch kompiliert wird, sollten Sie einen Verweis auf die System.Transactions-Assembly in die Konfigurationsdatei einfügen. Der Verweis sollte unterhalb des Abschnitts / der compilation/assemblies-Konfigurationsdatei des Standardstammverzeichnisses Web.config oder der Konfigurationsdatei einer spezifischen Webanwendung hinzugefügt werden. Dies wird im folgenden Beispiel veranschaulicht:

<configuration>
   <system.web>
      <compilation>
         <assemblies>
      <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
         </assemblies>
      </compilation>
   </system.web>
</configuration>

Weitere Informationen finden Sie unter Hinzufügen von Elementen für Assemblys für die Kompilierung (ASP.NET-Einstellungsschema).

Siehe auch