0

System.Servicemodel.Channels.Message を継承するカスタム メッセージを使用しています。
私のカスタム メッセージは、データベースから取得した IEnumerable コレクションを取得します。
WCF サービスはトランザクション対応です (既にテスト済み)。

MS-DTC が有効です。

問題は、保護されたオーバーライド void OnWriteBodyContents(XmlDictionaryWriter writer)メソッドがカスタム メッセージで実行されるときに、トランザクションがないことです。
System.Transactions.Transaction.Current が null です。サービスの実行中、トランザクション フローは正常に動作しますが、メッセージが WCF メカニズムによって書き込まれると、DB コマンド (データをプルする) がトランザクションなしで実行されるトランザクションから外れているように見えます。
IEnumerable の代わりに単純な配列を渡す場合、DB アクションはトランザクションの下で実行されますが、応答の書き込みと並行して実行する必要があることに注意してください。

トランザクションが欠落している理由と、それをアクティブにするために何ができるかについて、アイデアをお願いします。

どうもありがとう!
タミール。

4

1 に答える 1

1

トランザクションは通常、現在のスレッドまたは呼び出し元のコンテキストに関連付けられます。したがって、別のスレッドでトランザクションを開始し、メッセージのシリアル化が別のスレッドで発生している場合、そのスレッドではトランザクションを利用できません。このようなシナリオをサポートするには、TransactionScope とDependentTransactionを確認する必要があります。

于 2010-08-25T09:30:56.097 に答える