114

これも有効な質問ですか?MSTDCを使用している.NETWindowsアプリがあり、例外がスローされています。

System.Transactions.TransactionManagerCommunicationException:分散トランザクションマネージャー(MSDTC)のネットワークアクセスが無効になっています。コンポーネントサービス管理ツールを使用して、MSDTCのセキュリティ構成でネットワークアクセスのDTCを有効にしてください---> System.Runtime.InteropServices.COMException(0x8004D024):トランザクションマネージャーがリモート/ネットワークトランザクションのサポートを無効にしました。(HRESULTからの例外:0x8004D024)System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize、Byte [] propgationToken、IntPtr managedIdentifier、Guid&transactionIdentifier、OletxTransactionIsolationLevel&isolationLevel、ITransactionShim&transactionShim)。

Kbalertzガイドに従って、アプリがインストールされているPCでMSDTCを有効にしましたが、それでもエラーが発生します。

これはデータベースの問題なのだろうか?もしそうなら、どうすればそれを解決できますか?

4

7 に答える 7

138

これは、Windows Server 2008 r2 および Windows Server 2012 R2 に使用します。

  1. [スタート] ボタン、[ファイル名を指定して実行] の順にクリックし、「 dcomcnfg 」と入力して [ OK ] をクリックし、コンポーネント サービスを開きます。

  2. コンソール ツリーで、[コンポーネント サービス] をクリックして展開し、[コンピュータ] をクリックして展開し、[マイ コンピュータ] をクリックして展開し、[分散トランザクション コーディネータ] をクリックして展開し、[ローカル DTC ] をクリックします。

  3. ローカル DTCを右クリックし、[プロパティ] をクリックして、[ローカル DTC のプロパティ] ダイアログ ボックスを表示します。

  4. [セキュリティ] タブをクリックします。

  5. 「Network DTC Access」チェックボックスにチェックを入れます。

  6. 最後に「インバウンドを許可」「アウトバウンドを許可」のチェックボックスにチェックを入れます。

  7. [適用]、 [ OK ] の順にクリックします。

  8. サービスの再起動に関するメッセージがポップアップ表示されます。

  9. [ OK]をクリックします。

参考:https ://msdn.microsoft.com/en-us/library/dd327979.aspx

注:ローカル コンピューターまたはサーバーのネットワークファイアウォールが接続を中断することがあります C:\Windows\System32\msdtc.exe

于 2014-12-03T04:54:01.903 に答える
104

MSDTCも必要ですか?発生しているエスカレーションは、多くの場合、単一のTransactionScope内に複数の接続を作成することによって発生します。

必要な場合は、エラーメッセージに示されているように有効にする必要があります。XPの場合:

  • [管理ツール]->[コンポーネントサービス]に移動します
  • [コンポーネントサービス]->[コンピューター]->[
  • 右クリック->[プロパティ]->[MSDTC]タブ
  • [セキュリティ構成]ボタンをクリックします
于 2008-08-11T12:10:05.363 に答える
21

デバッグする最良の方法は、 DTCPingと呼ばれるMicrosoftツールを使用することです。

  1. サーバー(DB)とクライアント(アプリケーションサーバー/クライアントPC)の両方にファイルをコピーします
    • サーバーとクライアントで起動します
    • サーバーで:クライアントのnetbiosコンピューター名を入力し、DTC接続をセットアップしてみます
    • 両方のアプリケーションを再起動します。
    • クライアントで:サーバーのnetbiosコンピューター名を入力し、DTC接続をセットアップしてみます

私は古い会社のネットワークでかなりの問題を抱えていましたが、いくつかのヒントがあります。

  • 「Gethostbynamefailed」というエラーメッセージが表示された場合は、コンピュータがnetbiosで他のコンピュータを見つけることができないことを意味します。たとえば、サーバーはクライアントを解決してpingを実行できますが、これはDNSレベルで機能します。netbiosルックアップレベルではありません。WINSサーバーを使用するか、LMHOST(ダーティ)を変更すると、この問題が解決します。
  • 「アクセスが拒否されました」というエラーが表示された場合、セキュリティ設定が一致していません。msdtcの[セキュリティ]タブを比較し、サーバーとクライアントを一致させる必要があります。もう1つ確認する必要があるのは、RestrictRemoteClients値です。OSのバージョン、さらに重要なのはService Packによって、この値は異なる場合があります。
  • その他の接続の問題:
    • サーバーとクライアント間のファイアウォールは、ポート135を介した通信を許可する必要があります。さらに重要なことに、両方のサイトから接続を開始できます(サーバーのみが接続を開くと想定していたため、社内のファイアウォール担当者と多くの問題が発生しました。そのポートに)
    • プロトコルは、実際のトランザクション通信のために接続するランダムなポートを返します。ファイアウォールの人々はそれが好きではなく、ポートを特定の範囲に制限することを好みます。ファイアウォールで機能するようにRPC動的ポート割り当てを構成する方法で説明されているように、キーを使用してRPC動的ポートの生成を特定の範囲に制限できます。

私の経験では、DTCPingがクライアントから開始されサーバーから開始されたDTC接続をセットアップできる場合、トランザクションはもはや問題ではありません。

于 2009-01-26T08:49:42.470 に答える
7

コントロール パネルの services.msc から MSDTC を有効にする方法については、こちらも参照してください。

トリガーが存在するサーバーで、MSDTC サービスをオンにする必要があります。これを行うには、[スタート] > [設定] > [コントロール パネル] > [管理ツール] > [サービス] をクリックします。「Distributed Transaction Coordinator」というサービスを見つけて、右クリック (選択) > [開始] をクリックします。

于 2014-06-03T07:35:51.723 に答える
4

MSDTCは、サーバーとクライアントの両方のシステムで有効にする必要があります。
また、RPCをブロックするシステム間にファイアウォールがないことを確認してください。
DTCTestは、他の問題のトラブルシューティングに役立つ優れたアプリです。

于 2008-08-11T12:04:11.523 に答える
4

@ダン、

トランザクションを機能させるためにmsdtcを有効にする必要はありませんか?

分散トランザクションのみ-複数の接続を伴うトランザクション。トランザクション内で1つの接続のみを開いており、エスカレートしないことを二重に確認してください。パフォーマンスも大幅に向上します。

于 2008-08-11T23:02:13.597 に答える
1

MSDTC は、MsDtc PowerShell モジュールを使用して構成できます。たとえば、次のようになります。

# Import the module
Import-Module -Name MsDtc

# Set the DTC config
$dtcNetworkSetting = @{
    DtcName                           = 'Local'
    AuthenticationLevel               = 'NoAuth'
    InboundTransactionsEnabled        = $true
    OutboundTransactionsEnabled       = $true
    RemoteClientAccessEnabled         = $true
    RemoteAdministrationAccessEnabled = $true
    XATransactionsEnabled             = $false
    LUTransactionsEnabled             = $true
}
Set-DtcNetworkSetting @dtcNetworkSetting

# Restart the MsDtc service
Get-Service -Name MsDtc | Restart-Service

分散トランザクションをサポートする各マシン (つまり、MSDTC サービスが実行されている場所) で実行します。

于 2021-05-07T04:01:29.170 に答える