Utilisation de System.Transactions dans ASP.NET [ws_fxtransactions_4]

Cette rubrique explique comment utiliser System.Transactions dans une application ASP.NET.

Activation de DistributedTransactionPermission dans ASP.NET

System.Transactions prend en charge les appelants d'un niveau de confiance partiel et est marqué avec l'attribut AllowPartiallyTrustedCallers (APTCA). Les niveaux de confiance pour les System.Transactions sont définis d'après les types de ressource (par exemple, la mémoire système, les ressources partagées au niveau du processus, les ressources système et d'autres ressources) exposés par System.Transactions et le niveau de confiance requis pour accéder à ces ressources. Dans un environnement de confiance partielle, un assembly qui n'a pas un niveau de confiance totale ne peut utiliser que les transactions du domaine d'application (dans ce cas, les seules ressources protégées correspondent à la mémoire système), sauf s'il dispose de l'autorisation DistributedTransactionPermission.

L'autorisation DistributedTransactionPermission est demandée chaque fois que la gestion des transactions est remontée pour être managée par le MSDTC (Microsoft Distributed Transaction Coordinator). Ce genre de scénario utilise des ressources au niveau du processus et, en particulier, une ressource globale servant d'espace réservé dans le journal MSDTC. Par exemple, le frontal Web d'une base de données ou une application qui utilise une base de donnée en tant que partie des services qu'il fournit.

ASP.NET dispose de son propre jeu de niveaux de confiance et associe un jeu d'autorisations spécifique à ces niveaux de confiance via des fichiers de stratégie. Pour plus d'informations, voir ASP.NET Trust Levels and Policy Files. Lors de la première installation du Kit de développement logiciel (SDK) Windows, aucun des fichiers de stratégie ASP.NET par défaut n'est associé à DistributedTransactionPermission. Ainsi, lorsque votre transaction est remontée dans une application ASP.NET pour gestion par le MSDTC, la remontée échoue avec une SecurityException lors de la demande de DistributedTransactionPermission. Pour activer la remontée des transactions au sein d'un environnement ASP.NET de confiance partielle, vous devez accorder l'autorisation DistributedTransactionPermission aux mêmes niveaux de confiance par défaut que ceux de l'autorisation SqlClientPermission. Vous pouvez configurer vos propres niveau de confiance et fichier de stratégie personnalisés pour la prise en charge ou modifier les fichiers de stratégie par défaut : Web_hightrust.config et Web_mediumtrust.config.

Pour modifier les fichiers de stratégie, ajoutez un élément SecurityClass pour DistributedTransactionPermission à l'élément SecurityClasses sous l'élément PolicyLevel et ajoutez un élément IPermission correspondant sous le ASP.NET NamedPermissionSet pour System.Transactions. Le fichier de configuration suivant illustre ceci.

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

Pour plus d'informations sur la stratégie de sécurité d'ASP.NET, consultez <securityPolicy> Element.

Compilation Dynamique

Pour importer et utiliser System.Transactions dans une application ASP.NET compilée dynamiquement lors de l'accès, insérez une référence à l'assembly System.Transactions dans le fichier de configuration. Cette référence doit être ajoutée sous la section compilation/assemblies du fichier de configuration Web.config racine par défaut ou du fichier de configuration d'une application Web spécifique. Cela est illustré par l'exemple suivant.

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

Pour plus d'informations, voir add Element for <assemblies> for <compilation>.

Voir aussi

Concepts

Remontée de la gestion des transactions [ws_fxtransactions_4]

Autres ressources

ASP.NET Trust Levels and Policy Files

ASP.NET <securityPolicy> Element