2012-07-06 54 views
1

我需要在.Net Web應用程序中執行一系列文件系統和數據庫操作,如果發生故障,所有事件都會回滾。這些操作是:使用HttpPostedFile 發佈文件的一個事務中的ASP.Net數據庫和IO操作

  • 插入記錄到數據庫
  • 工藝和保存多頁TIFF作爲服務器
  • 的插入記錄單個文件的單個圖像

    1. 上傳多頁TIFF文件到服務器個人圖像到數據庫

    我可以使用3.5框架中的可用類將這些操作包裝在單個事務中嗎?我應該手動使用try catch塊和回滾操作嗎?

  • +0

    使用TransactionScope時,會發生以下錯誤: 事務管理器已禁用其對遠程/網絡事務的支持。 此錯誤在[http://stackoverflow.com/questions/10130767/the-transaction-manager-has-disabled-its-support-for-remote-network-transactions](http://stackoverflow.com/questions-10130767/the-transaction-manager-has-disabled-its-support-for-remote-network-transactions) – kyletme 2012-07-06 04:09:46

    回答

    1

    Can I wrap these operations in a single transaction using the available classes in the 3.5 framework?

    不,不是因爲你有一個薄弱環節,任何其他技術。使用HttpPostedFile

    發佈文件的

    2.插入記錄到數據庫

    3.Process並保存在服務器上

    在多頁TIFF作爲單獨的文件單獨的圖像

    1.Upload多頁TIFF文件到服務器4.插入單個圖像到數據庫的記錄

    2-4可以在現代Windows上的事務中輕鬆完成 - NTFS可以參與事務。

    你的問題是1. 1是不可能的,因爲 - 注意 - HTTP沒有交易的概念。如果上傳發生在你的服務器上,你可能會在Upload CRM(補償資源管理器)中上傳插件,但是你需要能夠通過HTTP Too刪除它們,以便在回滾的情況下(完全但可選)可見直到你提交。這就是如果API支持IT - 寫作(.NET中的CRM非常容易),否則你會死在那裏或採取妥協。

    如果您上傳到您的服務器,然後在一個交易中處理,技術上處理多個圖片上傳正確,你必須決定transaciotnal控件的位置。上傳必須有適當的API來啓動一個事務,使用事務標記進行上傳,然後在所有上傳完成時提交(只有在可以開始處理時)。這對程序來說是微不足道的,甚至在大多數情況下都不使用TPM,因爲您可以在處理中滾動邏輯事務。但是如果你願意,再一次CRM可以處理在回滾情況下的必要變化。

    +0

    你是對的。我最初的問題應該更清楚。一旦上傳的文件(步驟1)完成,我只是試圖在事務中將第2步到第4步打包。但是,當我在TransactionScope中將第2步到第4步的操作打包時,我仍然收到錯誤:事務管理器已禁用其對遠程/網絡事務的支持。 – kyletme 2012-07-06 04:42:38

    +1

    好吧,然後去閱讀文檔並正確配置DTC。這是一個完全不同的問題,而不是你在這裏問的問題。默認情況下,它對網絡是禁用的(例如,如果SQL Server是遠程的,則可能需要),但這是標準配置更改。隨意在Serverfault.com上打開一個關於它的地方的問題(因爲這是一個配置問題,而不是編程問題)。 – TomTom 2012-07-06 06:25:28

    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(); 
    } 
    
    +0

    回滾保存的文件如何?你會刪除它們還是什麼? – codingbiz 2012-07-06 03:35:35

    +2

    是的,他必須單獨處理這個問題......如果任何數據庫操作失敗,您可以在事務中進行嘗試並將其刪除。 – IrishChieftain 2012-07-06 03:37:16

    +0

    感謝您的反饋 – codingbiz 2012-07-06 03:39:35