2

アプリケーションでトランザクションを設定する際に問題が発生しています。軽量トランザクションを実行すると、次のように機能します。

using (TransactionScope tx = new TransactionScope())
{
  // Connect to Server 1 in a transaction

  tx.Complete()
}

ネストされたトランザクションを実行すると、失敗します:

using (TransactionScope tx = new TransactionScope())
{
  // Connect to Server 1 in a transaction

    using (TransactionScope tx2 = new TransactionScope())
    {
      // Connect to Server 2 in a transaction

      tx2.Complete()
    }

  tx.Complete()
}

私が得ているエラーは次のとおりです。

 The MSDTC transaction manager was unable to pull the transaction from the source transaction manager due to communication problems. Possible causes are: a firewall is present and it doesn't have an exception for the MSDTC process, the two machines cannot find each other by their NetBIOS names, or the support for network transactions is not enabled for one of the two transaction managers. (Exception from HRESULT: 0x8004D02B)

サーバーでまったく同じコードを実行すると、機能します。コンピューターで MSDTC を実行/構成しています (サーバーと同じ設定)。

私たちのネットワーク部門は、ファイアウォールでブロックされたトラフィックは見られないと言っています。

コンピューターからサーバーに DTC Ping できますが、サーバーから戻ることはできません。

何か案は?ネットワークの問題だと思いますが、助けが必要です。

4

2 に答える 2

0

ファイアウォールの問題であることが判明しました。ありがとう。

于 2012-11-29T20:37:58.443 に答える
0

コンピューターからサーバーに DTC Ping できますが、サーバーから戻ることはできません。

理由のようです。MSDTC では、両方のマシンが NetBios 名で相互に認識できる必要があります。「nbtstat -a xxx.xxx.xxx.xxx」を使用すると、IP を解決して両方の方法で名前を付けることができるはずです。

また、両方のマシンでポート 135 を開く必要があります。

于 2012-11-29T17:05:20.823 に答える