System.Servicemodel.Channels.Message を継承するカスタム メッセージを使用しています。
私のカスタム メッセージは、データベースから取得した IEnumerable コレクションを取得します。
WCF サービスはトランザクション対応です (既にテスト済み)。
MS-DTC が有効です。
問題は、保護されたオーバーライド void OnWriteBodyContents(XmlDictionaryWriter writer)メソッドがカスタム メッセージで実行されるときに、トランザクションがないことです。
System.Transactions.Transaction.Current が null です。サービスの実行中、トランザクション フローは正常に動作しますが、メッセージが WCF メカニズムによって書き込まれると、DB コマンド (データをプルする) がトランザクションなしで実行されるトランザクションから外れているように見えます。
IEnumerable の代わりに単純な配列を渡す場合、DB アクションはトランザクションの下で実行されますが、応答の書き込みと並行して実行する必要があることに注意してください。
トランザクションが欠落している理由と、それをアクティブにするために何ができるかについて、アイデアをお願いします。
どうもありがとう!
タミール。