- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【.NET 分散式交易程式開發FAQ 】 頁 1 / 11
.NET 分散式交易程式開發FAQ
作者: 李明儒
.NET 2.0讓分散式交易的程式開發步入一個簡便與彈性兼備的新紀元,然而在實作過程中,還是免不了
會有些顛簸崎嶇。本文以 FAQ 方式彙整分散式交易程式開發在實務上常遇到的問題,希望能提供一些指引。
1. 系統開發中常見的分散式交易(Distributed Transaction)情境為何?
最常見的情境是多部資料庫伺服器間的資料異動必頇包成一個交易。例如: 當兩台SQL Server 或SQL
Server 與Oracle Server 間的資料更動作業具有高度相關性時,兩台機器上的更新動作必頇要一起成功或
一起失敗,不允許Oracle 資料表新增了匯出記錄,SQL Server 上卻未寫入匯入記錄這類狀況發生。
2. 分散式交易是如何做到的?
Windows 平台上有所謂的MSDTC(Distributed Transaction Coordinator) ,有能力協調多部資料庫伺服
器完成兩階段式交易認可(Two-Phase Commit) ,其中的實作原理及細節頗為深奧,但一般.NET開發者只需
知道分散式交易由DTC 負責執行管理即可。
3. 如何啟用分散式交易?
ASP 時代,我們可以在開頭宣告%@ Transaction=Required% ,則ASP 中全部的資料庫動作都會被包成
分散式交易。但這樣不分青紅皂白地狂包一通往往不利於效能,如要有效控制啟用交易的範圍,一般標準的
做法是建立一顆Transaction Root COM+元件,Transaction Support Level 設為”Required” ,由它去
呼叫要參與Transaction 的COM+元件(Transaction Support Level設為”Support”) ,如此,我們可以
將Transaction 發生的範圍,侷限在特定的COM+元件間。
.NET 1.1裡要實作分散式交易,需要寫一顆繼承自 System.EnterpriseService.ServicedComponent
的元件,內含更新資料庫的程式邏輯,再設定 TransactionAttribute ,然後Strong-Named/Signed ,包
上COM+的皮,註冊放入COM+ Application 中,原則上還是借用了前述COM+的運作原理,但手續更加繁瑣。
.NET 2.0 推出System.Transactions.TransactionScope ,讓開發者可以重溫當年ASP 時代只需宣告,
資料庫存取程式碼完全不需修改就能參與交易的方便性,更由於TransactionScope 可以自由宣告要包成交
易的Code 區段範圍,應用的彈性又更上一層樓。
4. 原本好好的程式碼,啟用分散式交易後就出現連不上資料庫的錯誤?
啟用分散式交易後,程式存取資料庫的方式由原先直接連線資料庫特定TCP Port(例如: SQL Server預設
為1433 Port) ,變成要由MSDTC 透過 RPC連線與SQL Server 資料庫溝通或需依賴其他特定服務(例如: 必
頇要安裝Oracle Services for MTS 才能讓Oracle 參與分散式交易) ,由於連線方式改變,切換到分散
式交易後就無法連線資料庫的狀況還挺常見的。
以RPC連線為例,很容易受到Client 與Database Server 間防火牆的限制而無法連通,出現New
transaction cannot enlist in specified transaction coordinator (新增的交易無法編列在指定
的交易協調器中) 或Error 8004d00a.Distributed Transaction error (錯誤 8004d00a 。分散式交
易錯誤)兩種錯誤訊息。
【.NET 分散式交易程式開發FAQ 】 頁 2 / 11
關於MSDTC 穿防火牆的問題,微軟有一篇專門的文章提示如何排除。
(/kb/306843/zh-tw) KB 中提到的DTCPing 是處理DTC 問題很基本而
文档评论(0)