Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma popisuje, jak můžete úspěšně používat System.Transactions v aplikaci ASP.NET.
Povolení DistributedTransactionPermission v ASP.NET
System.Transactions podporuje částečně důvěryhodné volající a je označen atributem AllowPartiallyTrustedCallers (APTCA). Úrovně důvěryhodnosti jsou System.Transactions definovány na základě typů prostředků (například systémová paměť, sdílené prostředky pro celý proces, systémové prostředky a další prostředky), které System.Transactions zpřístupňují a úroveň důvěryhodnosti, která by měla být nutná pro přístup k těmto prostředkům. V prostředí s částečnou důvěryhodností může sestavení bez plné důvěryhodnosti používat pouze transakce v rámci aplikační domény (v tomto případě je jediným chráněným prostředkem systémová paměť), pokud není udělena DistributedTransactionPermission.
DistributedTransactionPermission vyžaduje se vždy, když je správa transakcí eskalována tak, aby byla spravována koordinátorem distribuovaných transakcí Společnosti Microsoft (MSDTC). Tento druh scénáře využívá prostředky na úrovni celého procesu a zejména globální prostředek, což je vyhrazený prostor v protokolu MSDTC. Příkladem tohoto použití je webový front-end databáze nebo aplikace, která používá databázi jako součást služeb, které poskytuje.
ASP.NET má vlastní sadu úrovní důvěryhodnosti a přidruží konkrétní sadu oprávnění k těmto úrovním důvěryhodnosti prostřednictvím souborů zásad. Další informace najdete v tématu ASP.NET Úrovně důvěryhodnosti a soubory zásad. Při prvotní instalaci sady Windows SDK nejsou k DistributedTransactionPermission přidruženy žádné výchozí soubory zásad ASP.NET. Proto, když je vaše transakce v aplikaci ASP.NET eskalována, aby bylo spravováno MSDTC, eskalace selže s výskytem SecurityException při vyžádání DistributedTransactionPermission. Pokud chcete povolit eskalaci transakcí v částečně důvěryhodném prostředí ASP.NET, měli byste přidělit DistributedTransactionPermission ve stejných výchozích úrovních důvěry jako ty, které má SqlClientPermission. Můžete buď nakonfigurovat vlastní úroveň důvěryhodnosti a soubor zásad tak, aby to podporoval, nebo můžete upravit výchozí soubory zásad, které jsou Web_hightrust.config a Web_mediumtrust.config.
Chcete-li upravit soubory zásad, přidejte SecurityClass element pro DistributedTransactionPermission k SecurityClasses elementu pod PolicyLevel element a přidejte odpovídající IPermission element pod ASP.NET NamedPermissionSet pro System.Transactions. Tento postup ukazuje následující konfigurační soubor.
<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>
Další informace o zásadách zabezpečení ASP.NET naleznete v tématu securityPolicy – element (ASP.NET Schéma nastavení).
Dynamická kompilace
Pokud chcete importovat a používat System.Transactions v aplikaci ASP.NET, která je dynamicky kompilována pro přístup, měli byste umístit odkaz na System.Transactions sestavení v konfiguračním souboru. Konkrétně by se měl odkaz přidat do compilation/assemblies části výchozího kořenového Web.config konfiguračního souboru nebo konfiguračního souboru konkrétní webové aplikace. Následující příklad ukazuje toto.
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
</configuration>
Další informace viz přidání prvku pro sestavení pro kompilaci (Schéma nastavení ASP.NET).