2010-12-01 7 views
1

j'imagine que l'utilisation du service WCF suivante: (d'un accepteur de trésorerie)transactions WCF

Service Consumer 1       Service Consumer 2 
cashAcceptorService.BeginTransaction();  cashAcceptorService.StopDevice(); 
              //this should throw exception: device is locked/used in a transaction          
cashAcceptorService.AcceptMoney();   

cashAcceptorService.EndTransaction(); 

Service aux consommateurs 1 et 2 utilisent la même instance unique WCF. Je me demande si cette fonctionnalité est déjà implémentée. Les transactions WCF offrent-elles cela?

Comment voyez-vous cela?

Répondre

0

Si ce qui suit est vrai:

  • Le service est en interaction avec un objet transactionnel (par exemple la base de données)
  • Le service a des flux de transaction permis

Alors WCF offre effectivement ce .

Le client peut alors utiliser la classe TransactionScope. Toute transaction initiée sur le client sera transmise automatiquement au service.

using(TransactionScope transactionScope = new TransactionScope()) 
{ 
    // Do stuff with the service here 
    cashAcceptorService.AcceptMoney(); 
    // 
    // 
    transactionScope.Complete(); 
} 

opérations de manutention dans WCF a tendance à être un chapitre entier d'un livre, mais cela devrait être assez d'informations pour vous sur la bonne voie.

+1

Ne pas utiliser une base de données. Je suppose que je peux définir le service wcf pour que le flux soit activé. Mais que se passe-t-il si un autre consommateur de service appelle s'arrête alors que l'appareil est dans une transaction. Je ne veux pas que d'autres dérangent l'appareil en cours d'utilisation. (appeler certaines méthodes spécifiques devraient échouer directement) Merci! – Zapacila

+0

WCF offre un support pour l'interaction avec les composants transactionnels. Il ne fournit pas de support pour la création de composants transactionnels. Je pense qu'il suffit d'écrire un mécanisme de verrouillage distinct des transactions. –