摘要:Web Service呼叫Web Service使用Transaction確保交易完整性測試報告
Web Service呼叫Web Service使用Transaction確保交易完整性測試報告
前言:
以前設計程式時,是透過ASP,COM+,DB的三層式架構方式來處理資料庫的存取
透過COM+存取的時候,可以透過COM+對於Transaction的支援來處理
因此寫了A元件與B元件,兩個分別維護資料庫DB_A與DB_B
萬一發生錯誤問題的時候,可以透過Transaction的機制將維護過程的資料還原(ROLLBACK)
並且存取資料庫的權限可以透過COM+的Package的識別設定來指定透過某個Windows帳號來存取相關的資料庫
問題:
目前進入.NET的設計,想尋找是否能夠用Web Service來取代COM+,借以解決.NET設計的COM+設定安裝不易、穿越防火牆安全設定的問題
因此有了以下的兩個問題想請教各位前輩們
1.是否能夠類似COM+的Package,【透過設定】指定某【Windows帳號】來執行相關的資料庫存取的方式
(ps.非固定寫在程式中)
2.是否能夠Web Service呼叫Web Service的過程中,確保雙方的資料異動能夠包在同一個Transaction中,確保異動的完整性
--------------------------------------------------------------------------------
小喵依需求的狀況舉個例子
以前的Asp三層式架構
a.asp呼叫COM_A並且維護DB_A的Table_A
在COM_A中又呼叫了另一個COM_B並且維護DB_B中的Table_B
a.asp----->COM_A------>DB_A.dbo.Table_A(台北的主機上的資料)
|
|
|
V
COM_B------>DB_B.dbo.Table_B(大陸的主機上的資料)
以前的三層式架構中,可以確保COM_A與COM_B分別維護的資料的完整性
當COM_A,COM_B中的任何一個部份有錯誤發生時,可以SetAbort來將已經部份維護的資料RollBack回去
由於透過.NET撰寫COM+元件在註冊的過程中有些複雜與麻煩....
但是在運用上卻需要透過這樣的方式來確保資料的完整性
所以想找看看是否能夠透過Web Service的方式來處理
--------------------------------------------------------------------------------
報告一下小喵最近測試的結果
測試目的:交易的RollBack
測試方式:
1.測試WS_A呼叫WS_B
WS_A:維護DB_A.dbo.TA
WS_B:維護DB_B.dbo.TB,DB_B.dbo.TC
WS_A,WS_B都設定為Requir Transaction
2.
WS_A→
TA:Insert資料正常
WS_B→
TC:Insert資料正常
TB:Insert資料,因Key重複發生錯誤
測試WS_B的TC是否維護進去,WS_A的TA是否維護進去
測試結果:
Try...Catch的Catch中
如果寫【Throw New System.Exception(ex.Message)】
那麼就可以讓
TA,TB,TC都沒有維護成功→有RollBack回去
如過Insert的資料是不會Key重複→資料三個完整的維護進去
--------------------------------------------------------------------------------
測試到這邊,算是初步的成功,可是以下的測試卻是令人失望
--------------------------------------------------------------------------------
測試目的:是否包在共同一個交易中,共用資源
測試方式:
1.WS_A:Insert資料到DB_A.dbo.TA
2.WS_A呼叫WS_B
3.WS_B:讀取WS_A中Insert進入的那一筆資料
4.【重點唷】兩個Web_Service都宣告為Required
(理論上兩個應該包成相同的一個交易中,相同的交易應該是共用資源,可以讀取到上一個WS新增的資料)
測試結果:
傳回:逾時
代表雖然宣告為Required,理論上應該是可以共用資源
但是實際測試後發現,運行的時候分別分屬兩個Transaction所以資料並無法視為共同資源運用
=========================================================================================
據說(不負責任的路邊攤消息)
這個問題將在2007年的Vista Server版本與配合的相關開發工具中獲得解決
看來目前小喵只能暫時用粉難註冊的COM+來處理目前的需求了
以上報告完畢
^_^
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |