1

以下は私のサンプルコードです。それらはすべて、クライアントからのサービスへの同期呼び出しです。ここでの私の質問は、リモート サービスが呼び出しについてどのように認識するかです -> ts.Complete();

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    try
    {
        ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
        obj.UpdateData();
        ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
        obj1.UpdateData();
        ts.Complete();
    }
    catch (Exception ex)
    {
        ts.Dispose();
    }
}

私は WSHttpbinding を使用しています。私の質問は次のとおりです。

  1. WSHttpBinding と basicHttpBinding はどちらもトランザクションをサポートしますか?
  2. 「ts.Complete()」呼び出し中、またはクライアント スコープでの例外中に、リモート WCF サービスに対して要求呼び出しが発生し、トランザクション マネージャーが自分のジョブをコミット/ロールバックしますか?
4

2 に答える 2

2

WSHttpBinding と basicHttpBinding はどちらもトランザクションをサポートしますか?

BasicHttpBinding はトランザクションに必要な WS-* 標準をサポートしていないため、TransactionScope を使用するには WSHttpBinding を使用する必要があります。

「ts.Complete()」呼び出し中またはクライアント スコープでの例外中に、リモート wcf サービスに対して要求呼び出しが発生し、トランザクション マネージャーがジョブをコミット/ロールバックします。

完全な呼び出しは、すべてがコミットされることを保証するものではありません。これにより、トランザクション マネージャーに作業が完了したことが通知されます。トランザクション マネージャがすべての関係者にコミットまたはロールバックするように通知するのは、トランザクション所有者に対する完全な呼び出しです。すべての関係者と通信できない場合は、例外がスローされます。

したがって、質問に答えるために、子参加者 (つまり、所有者ではない) の完全な呼び出しはトランザクション マネージャーへの呼び出しを引き起こしませんが、所有者参加者からの完全な呼び出しはトランザクション マネージャーを呼び出します。専念。

于 2013-01-28T16:56:17.120 に答える
1

TransactionScope は MSDTC を使用します。

MSDTC は、Microsoft Distributed Transaction Coordinator の頭字語です。名前が示すように、MSDTC は分散システムにトランザクション インフラストラクチャを提供する Windows サービスです。この場合、トランザクションとは、分散システム内の自律エージェント間の相互作用を構造化する一般的な方法を意味します。各トランザクションは、次の 4 つの主要なプロパティを持つ状態変換です。ACID プロパティは、Atomic (すべてか無か)、Consistent (合法)、Isolated (同時トランザクションから独立)、Durable (一度発生すると破棄できない) です。ACID プロパティを実装するさまざまな手法がありますが、最もよく知られているのは 2 フェーズ コミットです。

この記事から始めてください: http://blogs.msdn.com/b/florinlazar/archive/2004/03/04/what-is-msdtc-and-why-do-i-need-to-care-about -it.aspx

于 2013-01-28T10:50:19.017 に答える