Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’espace System.Transactions de noms prend en charge l’interopérabilité entre les objets de transaction créés à l’aide de cet espace de noms et les transactions créées via COM+.
Vous pouvez utiliser l’énumération EnterpriseServicesInteropOption lorsque vous créez une TransactionScope instance pour spécifier le niveau d’interopérabilité avec COM+.
Par défaut, lorsque votre code d'application vérifie la propriété statique Current, System.Transactions tente de rechercher une transaction qui serait autrement existante ou un objet TransactionScope qui indique que Current est nul. S’il ne trouve pas l’un de ces éléments, System.Transactions interroge le contexte COM+ pour une transaction. Notez que même si System.Transactions peut trouver une transaction à partir du contexte COM+, il privilégie toujours les transactions natives à System.Transactions.
Niveaux d’interopérabilité
L’énumération EnterpriseServicesInteropOption définit les niveaux d’interopérabilité suivants :NoneFull et Automatic.
La TransactionScope classe fournit des constructeurs qui acceptent EnterpriseServicesInteropOption comme paramètre.
None, comme le nom l’indique, implique qu’il n’existe aucune interopérabilité entre System.EnterpriseServices les contextes et les étendues de transaction. Après avoir créé un TransactionScope objet avec None, toutes les modifications à Current ne sont pas reflétées dans le contexte COM+. De même, les modifications apportées à la transaction dans le contexte COM+ ne sont pas reflétées dans Current. Il s’agit du mode d’opération le plus rapide pour System.Transactions lequel aucune synchronisation supplémentaire n’est requise. None est la valeur par défaut utilisée par TransactionScope pour tous les constructeurs qui n’acceptent pas EnterpriseServicesInteropOption comme paramètre.
Si vous souhaitez combiner System.EnterpriseServices transactions avec votre transaction ambiante, vous devez utiliser soit Full soit Automatic. Ces deux valeurs s’appuient sur une fonctionnalité appelée services sans composants. Par conséquent, vous devez être en cours d’exécution sur Windows XP Service Pack 2 ou Windows Server 2003 lors de leur utilisation.
Full spécifie que les transactions ambiantes pour System.Transactions et System.EnterpriseServices sont toujours identiques. Elle entraîne la création d’un nouveau System.EnterpriseServices contexte transactionnel et l'application de la transaction qui est actuelle pour le TransactionScope, afin qu'elle soit actuelle pour ce contexte. Par conséquent, la transaction dans Current est entièrement synchronisée avec la transaction dans Transaction. Cette valeur introduit une pénalité de performances, car de nouveaux contextes COM+ peuvent être créés.
Automatic spécifie les conditions suivantes :
Lorsqu’elle Current est cochée, System.Transactions doit prendre en charge les transactions dans le contexte COM+ si elle détecte qu’elle s’exécute dans un contexte autre que le contexte par défaut. Notez que le contexte par défaut ne peut pas contenir de transaction. Par conséquent, dans le contexte par défaut, même avec Automatic, la transaction stockée dans le stockage local de thread utilisé par System.Transactions est retournée pour Current.
Si un nouvel TransactionScope objet est créé et que la création se produit dans un contexte autre que le contexte par défaut, la transaction actuelle de l’objet TransactionScope doit être reflétée dans COM+. Dans ce cas, Automatic se comporte comme Full en ce sens qu'il crée un nouveau contexte COM+.
En outre, lorsqu’il Current est défini dans les deux Full et Automatic, ces deux modes impliquent qu’il Current ne peut pas être défini directement. Toute tentative de définition directe de Current autre que la création d’un TransactionScope entraîne un InvalidOperationException. La EnterpriseServicesInteropOption valeur d’énumération est héritée par de nouvelles étendues de transaction qui ne spécifient pas explicitement la valeur à utiliser. Par exemple, si vous créez un TransactionScope objet avec Full, puis créez un deuxième TransactionScope objet, mais ne spécifiez pas de EnterpriseServicesInteropOption valeur, le deuxième TransactionScope objet a également un Full.
En résumé, les règles suivantes s’appliquent lors de la création d’une nouvelle étendue de transaction :
Current est vérifié pour voir s’il existe une transaction. Cette vérification aboutit à :
la recherche d'une étendue éventuelle.
S’il existe une étendue, la valeur de l’énumération EnterpriseServicesInteropOption passée lors de la création initiale de l’étendue est vérifiée.
Si l'énumération EnterpriseServicesInteropOption a la valeur Automatic, la transaction COM+ (transaction System.EnterpriseServices) est prioritaire sur la transaction System.Transactions du stockage local des threads managés.
Si la valeur est définie à None, la transaction dans le stockage local de thread géré System.Transactions prend la priorité.
Si la valeur est Full, il n’y a qu’une seule transaction et il s’agit d’une transaction COM+.
La valeur de l’énumération TransactionScopeOption passée par le TransactionScope constructeur est vérifiée. Cela détermine si une nouvelle transaction doit être créée.
Si une nouvelle transaction doit être créée, les valeurs suivantes du EnterpriseServicesInteropOption résultat sont les suivantes :
Full: une transaction associée à un contexte COM+ est créée.
None: une System.Transactions transaction est créée.
Automatic: s’il existe un contexte COM+, une transaction est créée et attachée au contexte.
Le tableau suivant illustre le contexte des Services d’entreprise (ES) et un périmètre transactionnel qui requiert une transaction à l’aide de l’énumération EnterpriseServicesInteropOption.
| Contexte ES | Aucun | Automatique | Complet |
|---|---|---|---|
| Contexte par défaut | Contexte par défaut | Contexte par défaut | Créer nouveau contexte transactionnel |
| Contexte non par défaut | Gérer le contexte du client | Créer un contexte transactionnel | Créer un contexte transactionnel |
Le tableau suivant illustre ce que la transaction ambiante est, en fonction d’un contexte particulier System.EnterpriseServices et d’une étendue transactionnelle qui nécessite une transaction à l’aide de l’énumération EnterpriseServicesInteropOption .
| Contexte ES | Aucun | Automatique | Complet |
|---|---|---|---|
| Contexte par défaut | ST | ST | ES |
| Contexte non par défaut | ST | ES | ES |
Dans le tableau précédent :
ST signifie que la transaction ambiante de l'étendue est managée par System.Transactions, indépendamment de l'éventuelle présence de transactions du contexte System.EnterpriseServices.
ES signifie que la transaction ambiante de l'étendue est identique à la transaction du contexte System.EnterpriseServices.