Utilisation de System.Transactions dans ASP.NET

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 partiellement fiables et est marqué avec l’attribut AllowPartiallyTrustedCallers (APTCA). Les niveaux de confiance des System.Transactions sont définis d’après les types de ressource (par exemple, la mémoire système, les ressources partagées à l’échelle du processus, les ressources système et d’autres ressources) exposés par System.Transactions et le niveau de confiance qui devrait être requis pour y 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’autorisationDistributedTransactionPermission 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 composant web frontal 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, consultez Niveaux de confiance et fichiers de stratégie ASP.NET. Lors de l’installation initiale du 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 niveaux 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 NamedPermissionSet ASP.NET 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é ASP.NET, consultez Élément securityPolicy (Schéma des paramètres ASP.NET).

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. l’exemple ci-dessous illustre ce cas de figure.

<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, consultez Élément add pour les assemblys à compiler (Schéma des paramètres ASP.NET).

Voir aussi