2011-06-17 48 views
1

在我的項目中,DAL是WCF服務.Net4.0。使用數據庫oracle 11g。我在WCF(服務器端)使用事務範圍。 如果任何一個sp失敗,我必須調用方法(操作契約)中的多個存儲過程,我需要回滾已執行的sp。但是回滾沒有發生。我沒有使用客戶端事務流。WCF內的事務範圍中的問題

我把示例代碼

公共類服務:IService {

public bool Method1() 
    { 
     using (TransactionScope Scope1 = new TransactionScope()) 
     { 
      Method2(); 
      Method3(); 
      Scope1.Complete(); 
     } 
     return true; 
    } 

    public bool Method2() 
    { 
     using (TransactionScope Scope2 = new TransactionScope()) 
     { 
      // Procedure call ..... 
      Scope2.Complete(); 
     } 
     return true; 
    } 

    public bool Method3() 
    { 
     using (TransactionScope Scope3 = new TransactionScope()) 
     { 
      // Procedure call ..... 
      Scope3.Complete(); 
     } 
     return true; 
    } 

}

+0

你可以發佈你的代碼嗎 – 2011-06-17 13:39:15

回答

1

我看不出有任何理由如預期那樣是行不通的,方式你有你的代碼佈局在那裏。

但是,如果您使用的是WCF,則可能需要考慮使用內置於WCF的事務流東西。您可以將整個WCF調用以這種方式包裝到單個事務中,而無需手動創建和管理TransactionScopes。 WCF事務流可以設置爲在服務端需要一個事務,所以如果客戶端沒有通過,WCF將爲你啓動一個事務。這樣你就不必編輯你的客戶端了。 http://msdn.microsoft.com/en-us/library/ms751413.aspx

+0

我的理解是WCF不是一個因素,因爲事務處於服務端,客戶端和服務器之間沒有事務處理。您是否想過分析SQL以查看服務器上何時執行開始/結束事務調用? – Rich 2011-06-17 17:35:06