2

次のコードを検討してください。

try
{
    using(TransactionScope)
    {
       Process.Start("SQLInstaller.EXE");
       throw new Exception();
       Commit();
    }
}
catch(Exception ex)
{
//Do something here
}

このシナリオでは、SQLInstaller.exe によって行われた変更はロールバックされますか? 具体的には、Process.Start() を通じて起動された外部プロセスによって行われた変更は、TxF によって処理されますか?

ありがとう!

4

3 に答える 3

1

開始プロセスは、トランザクションを自動的に処理しません。

これは実際には、モデルが暗黙的であるか明示的であるかという問題です。暗黙的なモデルを推論するのは非常に難しいため、明示的なモデルを選択しました。たとえば、作成されたプロセスが停止し、トランザクションをパイプ処理しないRPC呼び出しを行った場合、RPCクライアントとサーバーは一貫した世界観を持っているでしょうか。

簡単な答え:いいえ。

于 2010-08-27T15:19:10.517 に答える
0

すべては、ファイル ハンドルの取得方法によって異なります。単純なFile.OpenWrite、または標準の .NET ファイル操作方法でファイルを開くと、そのアクセスがトランザクションではないことを確信できます。CreateFileTransactedハンドルを開こうとするたびに使用する必要があります。

于 2010-06-01T16:08:26.377 に答える
0

疑わしい。外部プロセスは、トランザクション スコープをまったく知りません。あなたが外部プロセスのコーダーであり、トランザクション ハンドルを渡す方法を持っていた場合、それは確かですが、この場合は非常にありそうにありません。

于 2010-06-01T16:02:03.117 に答える