Utilizzo di System.Transactions in ASP.NET
Questo argomento descrive il modo in cui è possibile utilizzare correttamente lo spazio dei nomi 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 insieme di livelli di attendibilità, a cui associa un insieme specifico di autorizzazioni utilizzando i file dei criteri. Per ulteriori informazioni, vedere ASP.NET Trust Levels and Policy Files. Quando si installa il database , inizialmente nessuno dei file dei criteri predefiniti di ASP.NET è associato all'autorizzazione 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 dell'autorizzazione DistributedTransactionPermission all'elemento SecurityClasses all'interno dell'elemento PolicyLevel. Quindi, aggiungere un elemento IPermission corrispondente all'interno dell'insieme NamedPermissionSet di ASP.NET di 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 protezione di ASP.NET, vedere <securityPolicy> Element.
Compilazione dinamica
Se si desidera importare e utilizzare lo spazio dei nomi 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. L'esempio seguente illustra come eseguire questa aggiunta.
<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 in merito, 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
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.