C#分散式交易解決方案-TransactionScope

來源:互聯網
上載者:User

標籤:代碼塊   win   即時   失敗   返回   dwr   工作   伺服器   右鍵   

 

引用一下別人的導讀:
在實際開發工作中,執行一個事件,然後調用另一介面插入資料,如果處理邏輯出現異常,那麼之前插入的資料將成為垃圾資料,
我們所希望的是能夠在整個這個方法定義為一個事務,TransactionScope 類提供一個簡單方法,通過這一方法,您不必與事務本身互動,
即可將代碼塊標記為參與某個事務。TransactionScope對象建立了一個事務,同時將該事務設定給Transaction類的Current屬性。一、TransactionScope的優點1、使用起來比較方便.TransactionScope可以實現隱式的事務,使你可以在寫資料訪問層代碼的時候不用考慮到事務,而在業務層的控制事務.2、可以實現分散式交易,比如跨庫或MSMQ. 二、TransactionScope缺點1、性價比不高.比如,你只是在"Scope"裡控制一個庫的事務.用"TransactionScope"就有點浪費了.2、一般情況下只要你使用"TransactionScope",都要配置MSDTC,要配防火牆,要開139連接埠.這個連接埠不可以更改 三、如果你不得不用分散式交易,那也得琢磨琢磨1.這步操作一定得在事務當中嗎?這步操作如果沒完成或者失敗了,值得復原整個事務嗎?難道沒有優雅的補償措施或者容錯措施?2.分散式交易涉及到的點,必須的這麼多?必須得即時的操作這一大串?不能通過通知類操作去精簡掉某些點?3.在發起分散式交易之後,你是不是做了事務無關的操作,儘管這些操作跟事務無關?(如,讀取資料、計算、等使用者返回訊息、等其他模組的調用返回等等)要知道事務應該儘快結束。4.你沒有把一些讀操作也算在事務裡面了吧?這是很容易犯的錯誤,你在事務中Enlist了一個select 操作。5.你的操作,某些步驟可以等全部操作完成之後再執行.這類操作具有明顯的通知類特點。通知類操作是說,我給你一個通知,並且我保證通知到了你;
你必須吃下這個通知,並且保證處理成功,但是你不必我一通知你你就處理。這樣的操作很明顯可以用另外一個任務去搞。 四、使用分散式交易注意如下幾點1:確保參與事務的machine開啟了分散式交易支援;2:如果machine開啟了防火牆,需要設定msdtc進程為例外;3:參與事務的machine不能跨域(如果跨域,目前微軟還沒有確切的解決方案);4:多資料庫時才使用分散式交易,如果是同一個資料庫,最好使用SqlTransaction.

 

 

 

1、先添加System.Transactions的引用(需要添加Net程式集)

C#調用時的代碼如下:

對此分散式交易類講解的很清晰的blogs地址:http://www.cnblogs.com/artech/archive/2010/01/31/1660356.html

using System.Transactions;using (TransactionScope scope = new TransactionScope()){    //trancation one do something...    var dbo1 = DBFactory.GetDBFacade(DBConnectionStringName.YSL_BusinessTravelTrade_ReadWrite);    string sql1 = "UPDATE dbo.TestUser SET name=‘ccc‘ WHERE id = 2";    dbo1.ExecuteNonQuery(CommandType.Text, sql1);    //trancation two do something...    var dbo = DBFactory.GetDBFacade(DBConnectionStringName.YSL_BusinessTravel_ReadWrite);    string sql = "UPDATE dbo.TestUser SET name=‘ccc‘ WHERE id = 2";    dbo.ExecuteNonQuery(CommandType.Text, sql);    //submit    scope.Complete();}

 

2、設定web伺服器及sql伺服器環境配置

控制台->系統和安全->管理工具->元件服務
(WEB伺服器和SQL伺服器都需要配置此項)

控制台->系統和安全->管理工具->服務
(WEB伺服器和SQL伺服器都需要配置此項)

控制台->系統和安全->Windows防火牆
(WEB伺服器和SQL伺服器都需要配置此項)

3、MSSQL配置

對伺服器串連,右鍵->屬性

 

4、配置Hosts(只配置WEB伺服器即可,如果不行,在SQL伺服器上也配置上)

C:\Windows\System32\drivers\etchosts檔案,用記事本開啟
(在WEB伺服器上的Hosts檔案中需要配置SQL伺服器的資訊)
(如果測試通不過,在SQL伺服器上的Hosts檔案中配置上WEB伺服器的資訊)

C#分散式交易解決方案-TransactionScope

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.