2

アプリケーションで分散トランザクションを維持する必要がある

Service1 が Server1 にインストールされているとします。

[ServiceContract]
IService1
{
    [OperationContract]
    Operation1();
}

Service2 は Server2 にインストールされます

[ServiceContract]
IService2
{
    [OperationContract]
    Operation2();
}

そしてクライアントは2つのサービスを消費しています

using (TransactionScope ts = new TransactionScope())
{
    Service1Proxy.Operation1();
    Service2Proxy.Operation2();
}

MSDTC を正確にどこにインストールする必要がありますか、Server1、Server2、およびクライアントにインストールする必要がありますか?

この場合、追加の構成が必要ですか?

4

2 に答える 2

1

クライアントとサーバー 1、サーバー 2 で MSDTC を有効にする必要があります。

クライアントの MSDTC のセキュリティ構成で送信を許可する必要があります。
サーバーでインバウンドとアウトバウンドを許可する必要があります。
DB が別のマシン上にある場合は、インバウンドを許可する必要があります。

MSDTC を使用して発生した問題の 1 つは、FIREWALL の例外のリストで MSDTC を許可することを忘れないことです。

コード スニペットを見ると、操作インターフェースにも Transactionflow 属性を追加する必要があります。

トランザクションを使用した WCF の適切なリンクは次のとおりです。Foundation: Transaction Propagation

于 2010-01-11T20:12:12.023 に答える
0

この設定には気をつけたいと思います。「TransactionScope」を使用して、テスト目的で実行したい SQL コマンドをプログラムで実行してからロールバックしましたが、WCF 呼び出しを通じて「TransactionScope」を伝播しようとはしていません。

Google でざっと検索すると、MSDN で次のドキュメントが見つかりました: http://msdn.microsoft.com/en-us/magazine/cc163432.aspx。このドキュメントでは、TransactionScope をサービスの境界にまたがらせるには、 Service インターフェイスに特別な属性が必要であると述べています。

MSDTC を「インストールする」限りでは、インストールしません。これは、既に Windows インストールの一部になっているはずです。ただし、MSDTC は既定ではネットワーク上のリモート クライアントとは連携しません。この設定はセキュリティ上の目的のためです。Windows Server 2003 で MSDTC を有効にしてリモート クライアントと連携させる方法を示すリンクを次に示します: http://support.microsoft.com/kb/817064。他のバージョンの Windows については、「MSDTC ネットワーク アクセス」について Google で検索してみてください。リモート トランザクションに含めたいサービスをホストしている各サーバーで、この構成を設定する必要があると思います。

WCF サービスは、考えられるさまざまな設定をすべて使用して構成するのが非常に難しい場合があります。これが開始に役立つことを願っています。

于 2010-01-11T15:46:00.220 に答える