2010-04-07 6 views
2

Existe-t-il un moyen de savoir dans une opération wcf qu'une transaction a validée?transaction Wcf

Ok, deuxième tentative d'être plus spécifique.

J'ai obtenu un service WCF avec une opération avec un flux de transaction autorisé.

Maintenant, lorsqu'un client appelle mon service wcf, il peut avoir une transaction. Mais mon service est également intéressé par le fait que la transaction sur le client a réussi. Parce que sur mon niveau de service wcf, si tout s'est bien passé. Il a d'autres choses à faire, mais seulement si toutes les transactions ont été engagées ....

Y a-t-il un événement auquel je peux m'abonner ou quelque chose?

+4

pdiddy mon homme! Vous vous êtes ennuyé avec tout le chant et tout ça et vous avez décidé de cuisiner un service WCF? Le respect! –

+0

pouvez-vous être plus précis – Dani

+2

Votre question ne rime même pas. –

Répondre

2

Cela dépend du service lui-même et de la façon dont vous gérez les transactions. Si vous vous engagez dans transactions in WCF through WS-Transaction alors si l'appel au client réussit sans exception, vous pouvez supposer que la transaction a eu lieu. Toutefois, si cela se passe dans le contexte d'une autre transaction, vous ne pouvez pas être certain que la transaction a été effectuée tant que la transaction conteneur n'est pas terminée.

Même si vous utilisez le TransactionScope class, si le service est activé pour utiliser les transactions, vous devez toujours prendre en compte la transaction englobante (s'il y en a une).

Vous devrez fournir plus d'informations sur l'emplacement de la transaction par rapport à l'appel afin d'obtenir une réponse plus complète.

+0

Y a-t-il un événement auquel je peux m'inscrire pour être averti que la transaction a été validée? – pdiddy

0

Essayez d'utiliser le comportement de fonctionnement attribut ci-dessus, dans votre opération qui permet TransactionFlow:

[OperationBehavior(TransactionScopeRequired=true)] 

Si une transaction flux du client, le service utilisera.

0
bool isTransactionComplete = true; 
try 
{ 
    using (TransactionScope trScope = new TransactionScope(TransactionScopeOption.Required)) 
    { 
     //some work 
     trScope.Complete(); 
    } 
} 
catch (TransactionAbortedException e) 
{ 
    //Transaction holder got exception from some service 
    //and canceled transaction 
    isTransactionComplete = false; 
} 
catch//other exception 
{ 
    isTransactionComplete = false; 
    throw; 
} 

if (isTransactionComplete) 
{ 
    //Success 
} 

Comme casperOne l'a écrit, cela dépend des paramètres. Mais vous devez être conscient des transactions complexes comme

1) service de session et les transactions simultanées pour une instance de service

2) transaction intérieur transaction

Questions connexes