標籤:代碼塊 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