Udostępnij za pośrednictwem


Używanie elementu System.Transactions w programie ASP.NET

W tym temacie opisano, jak można pomyślnie używać System.Transactions wewnątrz aplikacji ASP.NET.

Włącz DistributedTransactionPermission w programie ASP.NET

System.Transactions obsługuje częściowo zaufane wywołujące i jest oznaczony atrybutem AllowPartiallyTrustedCallers (APTCA). Poziomy zaufania dla programu System.Transactions są definiowane na podstawie typów zasobów (na przykład pamięci systemowej, udostępnionych zasobów dla całego procesu, zasobów dla całego systemu i innych zasobów), które System.Transactions uwidaczniają i poziom zaufania, który powinien być wymagany do uzyskania dostępu do tych zasobów. W środowisku częściowo zaufanym zestaw niezwiązany z pełnym zaufaniem może używać tylko transakcji w domenie aplikacji (w tym przypadku jedynym chronionym zasobem jest pamięć systemowa), chyba że przyznano DistributedTransactionPermissionmu wartość .

DistributedTransactionPermissionjest wymagany przy każdym eskalacji transakcji zarządzania można zarządzać przez transakcję Koordynator MSDTC (Microsoft Distributed). Tego rodzaju scenariusza wykorzystuje zasoby całego procesu i szczególnie globalne zasób, który jest zarezerwowane miejsce w dzienniku MSDTC. Przykładem tego użycia jest fronton sieci Web dla bazy danych lub aplikacji, która korzysta z bazy danych w ramach usług, które zapewnia.

ASP.NET ma własny zestaw poziomów zaufania i kojarzy określony zestaw uprawnień z tymi poziomami zaufania za pośrednictwem plików zasad. Aby uzyskać więcej informacji, zobacz ASP.NET poziomy zaufania i pliki zasad. Podczas początkowej instalacji zestawu Windows SDK żadne z domyślnych plików zasad ASP.NET nie są skojarzone z programem DistributedTransactionPermission. W związku z tym, gdy transakcja w aplikacji ASP.NET jest eskalowana do zarządzania przez MSDTC, eskalacja kończy się niepowodzeniem z żądaniem SecurityException DistributedTransactionPermission. Aby włączyć eskalację transakcji w środowisku ASP.NET częściowym zaufaniu, należy przyznać wartość DistributedTransactionPermission w tych samych domyślnych poziomach zaufania co SqlClientPermission. Możesz skonfigurować własny niestandardowy poziom zaufania i plik zasad, aby to obsługiwać, lub zmodyfikować domyślne pliki zasad, które są Web_hightrust.config i Web_mediumtrust.config.

Aby zmodyfikować pliki zasad, dodaj SecurityClass element do DistributedTransactionPermission SecurityClasses elementu w obszarze PolicyLevel elementu i dodaj odpowiedni IPermission element w obszarze ASP.NET NamedPermissionSet dla elementu System.Transactions. Następujący PLik konfiguracji pokazuje to.

<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>

Aby uzyskać więcej informacji na temat zasad zabezpieczeń ASP.NET, zobacz securityPolicy, element (ASP.NET Ustawienia Schema).

Dynamicznej kompilacji

Jeśli chcesz zaimportować zestaw i używać System.Transactions go w aplikacji ASP.NET, która jest dynamicznie kompilowana podczas uzyskiwania dostępu, należy umieścić odwołanie do System.Transactions zestawu w pliku konfiguracji. W szczególności należy dodać odwołanie w compilation/assemblies sekcji domyślnego głównego pliku konfiguracji Web.config lub pliku konfiguracji określonej aplikacji sieci Web. W poniższym przykładzie pokazano to.

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

Aby uzyskać więcej informacji, zobacz add Element for assemblies for compilation (ASP.NET Ustawienia Schema).

Zobacz też