1

.Net Webアプリケーションで一連のファイルシステムとデータベースの操作を実行する必要があります。障害が発生すると、すべてがロールバックされます。操作は次のとおりです。

  1. HttpPostedFileを使用して複数ページのtiffファイルをサーバーにアップロードします
  2. 投稿されたファイルのレコードをデータベースに挿入します
  3. 個々の画像を処理し、サーバー上の個々のファイルとして複数ページのtiffに保存します
  4. 個々の画像の記録をデータベースに挿入する

3.5フレームワークで利用可能なクラスを使用して、これらの操作を単一のトランザクションにラップできますか?try catchブロックとロールバック操作を手動で使用する必要がありますか?

4

2 に答える 2

1

3.5フレームワークで利用可能なクラスを使用して、これらの操作を単一のトランザクションにラップできますか?

いいえ、リンクが弱いため、他のテクノロジーでは使用できません。

1.HttpPostedFileを使用してマルチページtiffファイルをサーバーにアップロードします

2.投稿されたファイルの記録をデータベースに挿入します

3.サーバー上の個々のファイルとして複数ページのtiffで個々の画像を処理して保存します

4.個々の画像の記録をデータベースに挿入します

2〜4は、最新のウィンドウのトランザクションで簡単に実行できます。NTFSはトランザクションに参加できます。

あなたの問題は1.1は不可能です。なぜなら-注意-HTTPにはトランザクションの概念がないからです。サーバーからアップロードが行われる場合は、アップロードCRM(Compensating Resource Manager)にアップロードの侵入がある可能性がありますが、ロールバックの場合はHTTP Tooを介してそれらを削除し、(完全に、ただしオプションで)アップロードする必要があります。コミットするまで表示されます。これは、APIがそれをサポートしている場合です-書くのは簡単です(.NETのCRMは非常に簡単です)。そうでない場合は、行き止まりになるか、妥協します。

サーバーにアップロードしてからトランザクションで処理するように話しかける場合、技術的にはマルチイメージのアップロードを適切に処理するために、transaciotnalコントロールが存在する場所を決定する必要があります。アップロードには、トランザクションを開始し、トランザクショントークンを使用してアップロードを実行し、すべてのアップロードが完了したときにコミットするための適切なAPIが必要です(その場合にのみ処理を開始できます)。これはプログラミングが簡単であり、処理で論理トランザクションをロールできるため、ほとんどの場合TPMを使用しません。ただし、必要に応じて、ロールバックの場合にCRMで不要な変更を処理できます。

于 2012-07-06T04:27:08.510 に答える
0

次のようなものを試してください。

using (TransactionScope scope = new TransactionScope())
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        { 
            // Do all work here...  
        }
        catch (Exception ex)
        {
           // Delete files
           // LogError(ex);
        }                   
    }
    scope.Complete();
}
于 2012-07-06T03:33:41.827 に答える