4

Subsonic でトランザクション コンストラクト (次のように) を使用するには、MSDTC が Windows マシンで実行されている必要があります。右?

        using (TransactionScope ts = new TransactionScope())
        {
            using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope())
            {
                // update table 1
                // update table 2

                // ts.commit here

            }
        }
  1. MS-DTC は Windows システム (XP、Vista、Windows 7、サーバーなど) の既定のサービスですか?
  2. 有効になっていない場合、アプリケーションのインストール プロセス中に有効になるようにするにはどうすればよいですか?
4

4 に答える 4

7

MSDTC は Windows と共にインストールされます。そうでない場合は、次のコマンドでインストールできます。

msdtc -install

sc.exe を使用して MSDTC サービスを構成できます。サービスを自動的に開始するように設定し、サービスを開始します。

sc config msdtc start= auto
sc start msdtc

上記を実行するには、管理者権限が必要になることに注意してください。

于 2009-12-02T07:06:36.440 に答える
2

私が使う:

private bool InitMsdtc()
{
    System.ServiceProcess.ServiceController control = new System.ServiceProcess.ServiceController("MSDTC");
    if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
        control.Start();
    else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Paused)
        control.Continue();
    return true;
}
于 2011-03-24T22:18:53.527 に答える
1

これは役立つかもしれません:

http://www.thereforesystems.com/turn-on-msdtc-windows-7/

于 2010-10-04T04:34:35.610 に答える
0

DBMS が SQL Server 2000 で、TransactionScope を使用する場合、ローカル トランザクションに対しても分散トランザクションが作成されます。ただし、SQL Server 2005 (およびおそらく SQL Server 2008) は、分散トランザクションが不要であることを十分に認識できます。それがローカルDBにのみ適用されるのか、それとも削除サーバー上にある場合でもトランザクションが単一のDBのみを含む場合に当てはまるのかはわかりません。http://davidhayden.com/blog/dave/archive/2005/12/09/2615.aspx

1 つのヒントとして、バッチ クエリを使用して TransactionScope を回避できます。

http://subsonicproject.com/docs/BatchQuery

BatchQuery、QueueForTransaction、および ExecuteTransaction は TransactionScope を使用しませんが (もちろんプロバイダーの実装に依存します)、MSTDC を必要としない、基になるデータ プロバイダー (この場合は SqlTransaction) のトランザクション メカニズムを選択します。

于 2010-10-11T18:49:21.663 に答える