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