2012-03-19 86 views
0

我想使用NetMsmqBinding創建一個將數據插入Oracle數據庫的WCF服務。我正在使用C#和.NET 4.0的MS Visual Studio,當前使用的是System.Data.OracleClient和Oracle 11.使用Oracle數據庫插入的WCF MSMQ事務

我的要求是,假設客戶端能夠調用,沒有數據丟失服務成功(從而將消息放入MSMQ隊列中)。

因此,我試圖設計這樣的服務,如果插入Oracle成功,那麼郵件將從隊列中取出。如果不是,則不應該將該消息從隊列中取出,以便可以重試一段時間。我正在嘗試使用一個事務(使用TransactionScope類)來確保它以這種方式工作。

但是,我正在執行INSERT語句到Oracle的TransactionScope中,它引發了一個異常,似乎崩潰了IIS工作進程。看來WCF/.NET事務不被Oracle支持?我無法在任何地方找到明確的答案,以顯示Oracle是否支持.NET框架內的事務。這是可能做到的,還是我沒有走上正軌?任何意見,將不勝感激。

回答

0

如果要支持從ODP.net到Oracle的分佈式事務,則必須在客戶端計算機上運行Oracle MTS恢復服務。這包含在ODAC安裝包中。

+0

我確實運行了Oracle MTS恢復服務。但是,從提到ODP.net的評論中,這是否意味着System.Data.OracleClient不能用於事務處理,而必須使用ODP.net呢?我在嘗試之前詢問,因爲我們已經在使用System.Data.OracleClient,並且可能對我們來說是一項冗長的任務。 – 2012-03-19 17:26:47

+0

另外,我想補充一點,我只是從wcf服務向單個數據庫發送查詢,所以我不確定這會作爲分佈式事務合格嗎? – 2012-03-19 17:38:56

+0

我沒有使用微軟OracleClient的經驗,所以不幸的是我無法幫到你。但是,我已經通過使用TransactionScope通過ODP進行分佈式事務處理。其中一個難題就是安裝MTS恢復服務。僅供參考,如果交易在多臺機器上傳播,則按其定義分發。 – 2012-03-19 20:19:28