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.
Windows Communication Foundation (WCF) fournit des options hautement flexibles pour contrôler le flux de transactions. Les paramètres de flux de transaction d’un service peuvent être exprimés à l’aide d’une combinaison d’attributs et de configuration.
Paramètres du flux de transactions
Les paramètres de flux de transaction sont générés pour un point de terminaison de service à la suite de l’intersection des trois valeurs suivantes :
Attribut TransactionFlowAttribute spécifié pour chaque méthode dans le contrat de service.
Propriété de liaison
TransactionFlowdans la liaison spécifique.Propriété de liaison
TransactionFlowProtocoldans la liaison spécifique. LaTransactionFlowProtocolpropriété de liaison vous permet de choisir entre deux protocoles de transaction différents que vous pouvez utiliser pour transmettre une transaction. Les sections suivantes décrivent brièvement chacune d’elles.
protocole WS-AtomicTransaction
Le protocole WS-AtomicTransaction (WS-AT) est utile pour les scénarios où l’interopérabilité avec les piles de protocoles tierces est requise.
Protocole OleTransactions
Le protocole OleTransactions est utile pour les scénarios où l’interopérabilité avec les piles de protocoles tierces n’est pas nécessaire, et le déployeur d’un service sait à l’avance que le service de protocole WS-AT est désactivé localement ou que la topologie de réseau existante ne favorise pas l’utilisation de WS-AT.
Le tableau suivant présente les différents types de flux de transactions qui peuvent être générés à l’aide de ces différentes combinaisons.
| TransactionFlow liaison |
Propriété de liaison TransactionFlow | Protocole de liaison TransactionFlowProtocol | Type de flux de transaction |
|---|---|---|---|
| Obligatoire | vrai | WS-AT | La transaction doit être transmise au format WS-AT interopérable. |
| Obligatoire | vrai | OleTransactions | La transaction doit être transmise au format WCF OleTransactions. |
| Obligatoire | faux | Sans objet | Non applicable, car il s’agit d’une configuration non valide. |
| Autorisé | vrai | WS-AT | La transaction peut être transmise au format WS-AT interopérable. |
| Autorisé | vrai | OleTransactions | La transaction peut être transmise au format WCF OleTransactions. |
| Autorisé | faux | Valeur quelconque | Une transaction n’est pas transmise. |
| Non autorisé | Valeur quelconque | Valeur quelconque | Une transaction n’est pas transmise. |
Le tableau suivant récapitule le résultat de traitement des messages.
| Message entrant | Paramètre TransactionFlow | En-tête de transaction | Résultat du traitement des messages |
|---|---|---|---|
| La transaction correspond au format de protocole attendu | Autorisé ou obligatoire |
MustUnderstand est égal à true. |
Processus |
| La transaction ne correspond pas au format de protocole attendu | Obligatoire |
MustUnderstand est égal à false. |
Rejeté, car une transaction est requise |
| La transaction ne correspond pas au format de protocole attendu | Autorisé |
MustUnderstand est égal à false. |
Rejeté, car l’en-tête n’est pas compris |
| Transaction à l’aide de n’importe quel format de protocole | Non autorisé |
MustUnderstand est égal à false. |
Rejeté, car l’en-tête n’est pas compris |
| Aucune transaction | Obligatoire | N/A | Rejeté, car une transaction est requise |
| Aucune transaction | Autorisé | N/A | Processus |
| Aucune transaction | Non autorisé | N/A | Processus |
Alors que chaque méthode sur un contrat peut avoir des exigences de flux de transaction différentes, le paramètre de protocole de flux de transaction est délimité au niveau de la liaison. Cela signifie que toutes les méthodes qui partagent le même point de terminaison (et par conséquent la même liaison) partagent également la même stratégie autorisant ou nécessitant un flux de transactions, ainsi que le même protocole de transaction le cas échéant.
Activation du flux de transaction au niveau de la méthode
Les exigences de flux de transaction ne sont pas toujours identiques pour toutes les méthodes d’un contrat de service. Par conséquent, WCF fournit également un mécanisme basé sur des attributs pour permettre l’expression des préférences de flux de transaction de chaque méthode. Pour ce faire, le TransactionFlowAttribute spécifie le niveau auquel une opération de service accepte un en-tête de transaction. Vous devez marquer vos méthodes de contrat de service avec cet attribut si vous souhaitez activer le flux de transaction. Cet attribut prend l’une des valeurs de l’énumération TransactionFlowOption , dans laquelle la valeur par défaut est NotAllowed. Si une valeur à l’exception NotAllowed est spécifiée, la méthode est requise pour ne pas être unidirectionnelle. Un développeur peut utiliser cet attribut pour spécifier les exigences ou contraintes de flux de transaction au niveau de la méthode au moment de la conception.
Activation du flux de transactions au niveau du point de terminaison
Outre le paramètre de flux de transaction au niveau de la méthode fourni par l’attribut TransactionFlowAttribute , WCF fournit un paramètre à l’échelle du point de terminaison pour le flux de transactions afin de permettre aux administrateurs de contrôler le flux de transactions à un niveau supérieur.
Cela est obtenu par le TransactionFlowBindingElement, qui vous permet d’activer ou de désactiver le flux de transactions entrantes dans les paramètres de liaison d’un point de terminaison, ainsi que de spécifier le format de protocole de transaction souhaité pour les transactions entrantes.
Si la liaison a désactivé le flux de transaction, mais que l’une des opérations sur un contrat de service nécessite une transaction entrante, une exception de validation est levée au démarrage du service.
La plupart des liaisons persistantes que WCF fournit contiennent les attributs transactionFlow et transactionProtocol pour vous permettre de configurer la liaison spécifique afin d'accepter les transactions entrantes. Pour plus d'informations sur la définition des éléments de configuration, consultez <configuration de liaison>.
Un administrateur ou un déployeur peut utiliser le flux de transaction au niveau du point de terminaison pour configurer les exigences de flux de transaction ou les contraintes au moment du déploiement à l’aide du fichier de configuration.
Sécurité
Pour garantir la sécurité et l’intégrité du système, vous devez sécuriser les échanges de messages lors du flux de transactions entre les applications. Vous ne devez pas transmettre ou divulguer les détails de transaction à une application qui n’a pas le droit de participer à la même transaction.
Lors de la génération de clients WCF vers des services Web inconnus ou non approuvés via l’utilisation d’un échange de métadonnées, les appels aux opérations sur ces services web doivent supprimer la transaction actuelle si possible. L'exemple suivant illustre la procédure à suivre pour réaliser cette opération.
//client code which has an ambient transaction
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
{
// No transaction will flow to this operation
untrustedProxy.Operation1(...);
scope.Complete();
}
//remainder of client code
De plus, les services doivent être configurés pour accepter les transactions entrantes uniquement à partir des clients qu’ils ont authentifiés et autorisés. Les transactions entrantes ne doivent être acceptées que si elles proviennent de clients hautement approuvés.
Assertions de stratégie
WCF utilise des assertions de stratégie pour contrôler le flux de transactions. Les assertions de stratégie se trouvent dans le document de stratégie d’un service, qui est généré par l’agrégation de contrats, de configuration et d’attributs. Le client peut obtenir le document de stratégie du service à l’aide d’une requête-réponse HTTP GET ou d’un WS-MetadataExchange. Les clients peuvent ensuite traiter le document de stratégie pour déterminer quelles opérations sur un contrat de service peuvent prendre en charge ou exiger un flux de transaction.
Les assertions de stratégie de flux de transactions affectent le flux de transactions en spécifiant les en-têtes SOAP qu’un client doit envoyer à un service pour représenter une transaction. Tous les en-têtes de transaction doivent être marqués avec MustUnderstand égal à true. Tout message avec un en-tête marqué autrement est rejeté avec une erreur SOAP.
Une seule assertion de stratégie liée à la transaction peut être présente sur une seule opération. Les documents de stratégie avec plusieurs assertions de transaction sur une opération sont considérés comme non valides et rejetés par WCF. En outre, seul un seul protocole de transaction peut être présent à l’intérieur de chaque type de port. Les documents de stratégie avec opérations référençant plusieurs protocoles de transaction à l’intérieur d’un seul type de port sont considérés comme non valides et sont rejetés par l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe). Les documents de stratégie avec assertions de transaction présents sur les messages de sortie ou les messages d’entrée unidirectionnels sont également considérés comme non valides.