27

エラーが発生しています:

基盤となるトランザクションマネージャーとの通信に失敗しました

Visual Studio 2010からアプリケーションを実行しようとしています。この問題をグーグルで検索しましたが、このエラーを解決するために考えられるすべての解決策を試しました。

ここで、DTCプロパティを変更しました。

-- Network DTC Access
-- Allow Inbound
-- Allow Outbound
-- Allow Remote Administrator
-- Allow Remote Clients
-- No Authentication Required
-- Enable XA Transaction
-- Enable SNA LU 6.2 Transaction

誰かがこの問題の解決策を知っているなら、私に知らせてください。

ありがとうManojSitapara

4

4 に答える 4

35

DTCがファイアウォールを介して通信できるようにしてみてください。

ここに画像の説明を入力してください

于 2014-02-12T21:16:42.280 に答える
16

DTCPing分散トランザクションに関係するすべてのコンピューターにダウンロードして実行します。

ほとんどの場合、正確なエラーや何が問題になっているのか(同一のCIDなど)が表示されます。

考えられる理由:

  1. NetBIOS名でコンピュータにアクセスできません。この場合hosts、マッピングIP /ホスト名を追加するためにファイルを調整するか、ドメイン内の場合はそれらのDNSエイリアスを追加する必要があります。
  2. サーバーはVMであり、同じVMインスタンスから複製されました。この場合、MSDTC CIDは同一であり、MSDTCをインストール/再インストールする必要があります(DTCpingがこれを通知します)。
于 2012-07-06T05:20:50.527 に答える
5

潜在的な問題として重複するCIDがリストされているMSDTCトラブルシューティングガイドを確認してください。次のPowershellスクリプトを使用して、重複するCIDを検出し、必要に応じてWinRMを使用してMSDTCを再インストールできます。

write-host "Checking for duplicate CIDs and reinstalling MSDTC if needed."
$servers = "server1","server2","server3"
$CIDs = Invoke-Command -ComputerName $servers -ScriptBlock { gci Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | foreach { $_.Name } | Out-String -Stream } #Array of all CIDs on all servers
$UniqueCIDs = $CIDs | select -Unique
if($CIDs.Length -eq $UniqueCIDs.Length){
    Write-Output "All CIDs are unique, so we don't need to reinstall MSDTC"
} else {
    Write-Output "Found duplicate CIDs, so we need to reinstall MSDTC on all VMs"
    Invoke-Command -ComputerName $servers -ScriptBlock {
        write-output "`r`nUninstalling MSDTC to regenerate CIDs on $env:computername" 
        msdtc -uninstall | Write-Output
        sleep 25 #wait for previous command to finish
        write-output "`r`nReinstalling MSDTC to regenerate CIDs on $env:computername" 
        msdtc -install  | Write-Output
        sleep 25 #wait for previous command to finish
        write-output "`r`nSetting MSDTC service to automatic on $env:computername" 
        Set-Service msdtc -startuptype "auto"
        write-output "`r`nWARNING: $env:computername may need to be restarted for changes to take effect." 
    }
}
于 2013-05-29T18:32:46.547 に答える
0

クラスタでDTCとMSMQを設定しようとしたときに、通信エラーが発生しました。私の場合、根本的なエラーは「メモリ不足」でした。クラスターから別のサーバーにトランザクションメッセージを送信できましたが、そのサーバーからクラスターに戻ることはできませんでした。私のサービスはこの例外をスローします:

System.Transactions.TransactionAbortedException: The transaction has aborted. 
---> System.Transactions.TransactionManagerCommunicationException: Communication 
with the underlying transaction manager has failed. ---> 
System.Runtime.InteropServices.COMException: Ran out of memory (Exception from HRESULT: 0x80000002)

この記事には非常にあいまいな解決策がありました:http://www.nervousadmin.com/category/microsoft/windows/dtc/

要約する:

レジストリのHKLM\Cluster \ ResourceTypes \ Distributed Transaction Coordinatorの下にあるキーClusterDefaultResourceのGUIDがあり、DTCサービスの実行可能ファイルへのパスのguid引数と一致する必要があります。

この問題のもう1つの症状は、コンポーネントサービス管理コンソールを介してDTCプロパティにアクセスしようとすると、メモリ不足エラーが発生することです。コンポーネントサービス/コンピューター/マイコンピューター/分散トランザクションコーディネーターの下のコンソールツリーを見て、そこにリストされている各DTCを右クリックします。GUIDが整列していない場合、これによりエラーがスローされます。

  • services.mscを開きます。分散トランザクションコーディネーターを見つけます(2つある場合は、名前にGUIDが含まれているコーディネーターを探しています)
  • そのDTCのプロパティを開きます。'パスから実行可能ファイル'にGUIDをコピーします
  • regeditを開きます。HKLM \ Cluster \ ResourceTypes \ DistributedTransactionCoordinatorを検索します
  • ClusterDefaultResource値をコピーしたGUIDと比較します。それらが異なる場合は、次のステップで修正する必要があります。そうでなければ、これはあなたの答えではありません。
  • 現在の値をバックアップします。ClusterDefaultResourceプロパティを編集します。services.mscDTCプロパティからコピーしたGUIDを貼り付けます。クラスタ内の各ノードでこれを行う必要があります。
  • 運が良ければ、これで問題は解決しました。
于 2018-01-15T16:48:01.053 に答える