3

私のプログラムは、いくつかのファイル操作を 1 つの単位として扱う必要があります。ケースの重要な手順のいくつかは次のとおりです。

  1. ディレクトリ内のファイルを削除します。
  2. いくつかのデータを検証します。データが無効な場合はロールバックします。
  3. ディレクトリにファイルをアップロードします。アップロードが失敗した場合は、ロールバックします。
  4. 変更をコミットします。

トランザクションに関するこの要件を提起するのは、ユーザーが VPN を使用して私の Web サイトにアクセスする場合があり、VPN 接続が非常に不安定になる可能性があるためです。

3 番目のステップが失敗した場合、1 番目のファイルと新しくアップロードされたファイルはすべて失われます。

私のコードの一部:

        DeleteTheOlderDT(path, FileName);

        this.fuTemplateName.SaveAs(path + FileName);
        _t.FileName = FileName;

        if (!System.IO.File.Exists(path + FileName))
        {
            ArrayList ItemList = new ArrayList();
            ItemList.Add("Uploading failed, please upload again!");
            btlError.DataSource = ItemList;
            btlError.DataBind();
            _t.FileName = "";
            return;
        }
4

3 に答える 3

2

これは手動でしかできないと思います。Martin Fowler のUnitOfWorkを見てください。彼が説明したようなことを実現できます。

また、このリンクを確認してください。

于 2012-05-30T05:32:49.190 に答える
1

Windows Vista 以降ではTransactional NTFSがサポートされているため、役立つ場合があります。

しかし、実際には、ロジックを作り直すことを検討する必要があります。一時ファイルにアップロードし、アップロードが成功した場合にのみ元のファイルを削除 (および一時ファイルの名前を変更) します。

于 2012-05-30T07:38:04.573 に答える
1

ファイル システムで試したことはありませんが、コード プロジェクトに関する優れた記事があります。

http://www.codeproject.com/Articles/31270/A-Transactional-Repository-Implementation-in-NETをご覧ください。

問題が解決することを願っています。

于 2012-05-30T05:30:32.313 に答える