14

エンティティでMVC 3を使用していますが、コントローラーから以下のコード行を使用しました

        using (var scope = new TransactionScope())
        {
            _myRepository.DeleteFM1(id);
            _myRepository.DeleteFM2(id, name);
            scope.Complete();
        }

Entityクラスで定義されたメソッドであるDeleteFM2メソッド内は次のとおりです。

    public void DeleteFM2(int id, string name)
    {
        var data= _repositoryMD.Fetch().Where(mColl => mColl.Col1 == id);

        if (data!= null)
        {
                //insert here is giving some error MSDTC error !
                // here I prepare a message using the '**data**'
                _repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime);


                _repositoryMD.Attach(data);
                _repositoryMD.Delete(data);
                _repositoryMD.SaveChanges();
            }
        }
    }

Insertメソッドを次のように定義した別のクラスがあります

   public bool Insert(string realName, string logMessage, string tableName, string changeType, DateTime dateTime)
    {
        var history = new History
        {
            ModifiedBy = realName,
            ChangeType = changeType,
            DateModified = dateTime,
            LogMessage = logMessage,
            TableName = tableName
        };

        _repositoryHistory.Add(history);
        _repositoryHistory.SaveChanges();

        return true;
    }

上記のメソッド DeleteFM2 にこのコード行を挿入した後

      _repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime);

このエラーが発生しています。この行がないとコードは正常に動作します。トランザクション スコープを使用した場合でも、他のすべてのメソッドでこの行を使用しましたが、まだ問題を理解していないようです。助けてください。ありがとう

基になるプロバイダーが Open で失敗しました。

System.Transactions.TransactionManagerCommunicationException: 基になるトランザクション マネージャーとの通信に失敗しました。---> System.Runtime.InteropServices.COMException: 通信の問題により、MSDTC トランザクション マネージャーはソース トランザクション マネージャーからトランザクションを取得できませんでした。考えられる原因は次のとおりです。ファイアウォールが存在し、MSDTC プロセスの例外がない、2 台のマシンが NetBIOS 名で互いを検出できない、またはネットワーク トランザクションのサポートが 2 つのトランザクション マネージャーのいずれかで有効になっていない。(HRESULT からの例外: 0x8004D02B) System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize、Byte[] propgationToken、IntPtr managedIdentifier、Guid& transactionIdentifier、OletxTransactionIsolationLevel& isolationLevel、

私のファイアウォール設定

私のファイアウォール設定

4

7 に答える 7

16

構成、ファイアウォール、および netbios/dns が正しく設定されていても、このエラーが発生しました。私のセットアップの 2 つのサーバーは互いのクローンであったため、各サーバーの MSDTC は同じ CID 値を持っていたため、相互運用できませんでした。

MSDTC http://msdn.microsoft.com/en-us/library/aa561924.aspxをトラブルシューティングするときに考慮すべきその他の事項を次に示します 。 私の状況は、MSDTC に一意の CID 値が割り当てられていることを確認してください

Windows オペレーティング システムの MSDTC 機能では、コンピューター間で MSDTC 機能が正しく動作するように、一意の CID 値が必要です。Windows インストールのディスク複製イメージには一意の CID 値が必要です。そうしないと、MSDTC 機能が損なわれる可能性があります。これは、仮想ハード ディスクを使用してオペレーティング システムを仮想マシンに展開するときに発生する可能性があります。

Windows オペレーティング システムを実行しているコンピューターの MSDTC CID 値が一意であるかどうかを確認するには、両方のコンピューターの HKEY_CLASSES_ROOT\CID レジストリ キーの下にあるエントリの値を確認します。これらの値がコンピューターごとに一意でない場合は、「他のトラブルシューティング手順が成功しない場合は、分散トランザクション コーディネーター サービスの再インストールを検討する」セクションの手順に従って、いずれかのコンピューターに MSDTC を再インストールします。これにより、そのコンピューターに一意の MSDTC CID 値が生成されます。適切な MSDTC 操作に対応します。

Windows 2012 Server で CID をリセットするには、次の Powershell スクリプトを使用します。

#View: CIDs (These must be different on all systems)
ls Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | select Name


#reinstall MSDTC to regenerate CIDs. 
msdtc -uninstall
sleep 5
msdtc -install
sleep 5
Set-Service msdtc -startuptype "auto"
#then reboot for changes to take effect
于 2012-06-28T17:18:22.077 に答える
7

_repositoryHistoryこのエラーは、対象のデータベースを含むデータベース サーバーで MSDTC が実行されていないことを意味します。または、そのマシンへのトランザクションの伝播を妨げるネットワークの問題があることを示しています。

MSDTC がデータベース サーバーにインストールされ、実行されていることを確認します。

ターゲット サーバーで Windows ファイアウォールが実行されているかどうかを確認します。そうである場合は、MSDTC のファイアウォールの除外を確認してください。次のリンクが役に立ちます: http://technet.microsoft.com/en-us/library/cc725913(v=ws.10).aspx

于 2012-04-27T07:38:58.427 に答える
5

DTCPingを使用して、DTC 関連のエラーをトラブルシューティングします。これは、私たちのシステムで分散トランザクションの書き込みをトラブルシューティングするために、長年にわたって私にとって頼りになるツールでした。

于 2012-11-12T21:23:52.070 に答える
2

ここで他のすべてを試した後、DTC サービス (MSDTC.EXE) をファイアウォールに追加する必要がありました。「分散トランザクション コーディネーター」
の既定のファイアウォール設定は を使用していました。MSDTC.EXEを使用 して新しいルールを追加すると、問題が修正されました。"%SystemRoot%\system32\svchost.exe"

于 2016-04-06T21:38:03.567 に答える
1

私は数週間同じ問題を抱えています。2 つの Web サーバー (Win 2012) と 1 つの DB サーバー (Win 2008) があります。セキュリティの「認証なし」オプションを有効にすることで、問題が解決したことがわかりました。

CID : サーバーごとにすべて異なる MSDTC ネットワーク アクセス : 有効 MSDTC リモート アクセス : 有効 MSDTC リモート管理 : 無効 MSDTC 認証なし : 有効

サーバー ファームで適切に動作するようになりました。

于 2015-05-29T23:32:14.010 に答える
0

指定された MVC Web アプリケーションのアプリケーション プールのリサイクルを試みます。私はこの問題を経験しており、これがすぐに役立つことがわかりました。

于 2013-01-17T11:01:08.237 に答える