2010-08-25 8 views
0

J'utilise un message personnalisé héritant du System.Servicemodel.Channels.Message.
Mon message personnalisé obtient la collection IEnumerable tirée d'une base de données.
Le service WCF est transactionnel (qui a déjà été testé).Écriture de message personnalisé WCF avec la prise en charge des transactions

MS-DTC est activé.

Le problème est que lorsque les OnWriteBodyContents vides (écrivain de XmlDictionaryWriter) de protected override méthode est exécutée au message personnalisé, il n'y a pas de transaction.
Le System.Transactions.Transaction.Current est null. lors de l'exécution du service, le flux de transaction fonctionne correctement, mais lorsque le message est écrit par le mécanisme WCF, il semble qu'il soit sorti d'une transaction qui provoque l'exécution de la commande DB (extraction des données) sans transaction.
Veuillez noter que si je passe simple tableau au lieu de IEnumerable l'action DB est exécutée sous transaction, mais je veux qu'il soit exécuté parallèlement à l'écriture de la réponse.

Des idées s'il vous plaît, pourquoi la transaction est manquante et que peut-on faire pour l'activer?

merci beaucoup!
Tamir.

Répondre

1

Les transactions sont généralement attachées à votre thread ou contexte d'appel actuel. Donc, si vous lancez une transaction sur un thread différent et que la sérialisation du message est en cours sur un autre thread, la transaction ne sera pas disponible sur ce thread. Vous devriez regarder TransactionScope et DependentTransaction pour soutenir de tels scénarios.

+0

vous êtes génial! Merci pour ça. mais, comment pourrais-je résoudre ce genre de problèmes avant fx 4.0? – Tamir

+0

En fait, DepedentTransaction existe depuis l'introduction de System.Transactions, c'est-à-dire .NET 2.0 – VinayC

+0

oui, désolé, mon mauvais. n'a pas remarqué ça .. :-) – Tamir

Questions connexes