Utilizzo di System.Transactions in ASP.NET
[Questo argomento è una versione preliminare della documentazione e può essere soggetto a modifiche nelle versioni future. Sono presenti anche argomenti vuoti, utilizzati come segnaposto].
In questo argomento viene illustrato come utilizzare correttamente System.Transactions all'interno di un'applicazione ASP.NET.
Abilitare l'autorizzazione DistributedTransactionPermission in ASP.NET
Lo spazio dei nomi System.Transactions supporta i chiamanti parzialmente attendibili ed è contrassegnato con l'attributo APTCA (AllowPartiallyTrustedCallers). I livelli di attendibilità dello spazio dei nomi System.Transactions sono definiti in base ai tipi di risorse (ad esempio memoria di sistema, risorse a livello di processo condivise, risorse a livello di sistema nonché altre risorse) esposte dallo spazio dei nomi System.Transactions e in base al livello di attendibilità richiesto per accedere a queste risorse. In un ambiente parzialmente attendibile, un assembly non completamente attendibile può utilizzare soltanto le transazioni all'interno del dominio applicazione (in questo caso l'unica risorsa protetta è la memoria di sistema), a meno che non ottenga l'autorizzazione DistributedTransactionPermission.
L'autorizzazione DistributedTransactionPermission viene richiesta ogni volta che viene eseguita l'escalation della gestione della transazione in modo che questa venga gestita dal gestore MSDTC (Microsoft Distributed Transaction Coordinator). Questo tipo di scenario utilizza risorse a livello di processo e in particolare una risorsa globale, ovvero lo spazio riservato nel registro di MSDTC. Un esempio di questo utilizzo è un front-end Web per un database o per un'applicazione che fornisce servizi basati su database.
ASP.NET dispone di un proprio set di livelli di attendibilità, a cui associa un set specifico di autorizzazioni utilizzando i file dei criteri. Per ulteriori informazioni, vedere ASP.NET Trust Levels and Policy Files. Quando si installa Windows SDK, nessuno dei file dei criteri di ASP.NET è associato a DistributedTransactionPermission. Ne consegue che quando si tenta di eseguire l'escalation di una transazione appartenente a un'applicazione ASP.NET in modo che venga gestita tramite MSDTC, tale tentativo ha esito negativo e viene generata un'eccezione SecurityException in quanto la transazione non dispone dell'autorizzazione DistributedTransactionPermission. Per abilitare l'escalation delle transazioni in un ambiente ASP.NET parzialmente attendibile, è necessario concedere l'autorizzazione DistributedTransactionPermission agli stessi livelli di attendibilità predefiniti indicati nell'autorizzazione SqlClientPermission. A tale scopo è possibile configurare un livello di attendibilità e un file dei criteri personalizzati oppure modificare i file dei criteri predefiniti, ovvero Web_hightrust.config e Web_mediumtrust.config.
Per modificare i file dei criteri, aggiungere un elemento SecurityClass per DistributedTransactionPermission all'elemento SecurityClasses all'interno dell'elemento PolicyLevel e aggiungere l'elemento IPermission corrispondente all'interno dell'elemento ASP.NET NamedPermissionSet per System.Transactions. Queste modifiche vengono illustrate nel file di configurazione seguente.
<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>
Per ulteriori informazioni sui criteri di sicurezza di ASP.NET, vedere <securityPolicy> Element.
Compilazione dinamica
Se si desidera importare e utilizzare System.Transactions in un'applicazione ASP.NET compilata dinamicamente all'accesso, è necessario inserire nel file di configurazione un riferimento all'assembly System.Transactions. In particolare, il riferimento deve essere aggiunto nella sezione compilation/assemblies del file di configurazione radice predefinito di un'applicazione Web.config oppure nel file di configurazione di un'applicazione Web specifica. Nell'esempio che segue viene illustrato quanto descritto.
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
</configuration>
Per ulteriori informazioni, vedere add Element for <assemblies> for <compilation>.
Vedere anche
Concetti
Escalation della gestione delle transazioni
Altre risorse
ASP.NET Trust Levels and Policy Files
ASP.NET <securityPolicy> Element