2010-01-11 84 views
2

我必須保持我的應用程序的分佈式事務凡MSDTC需要安裝在分佈式事務的情況下

假設服務1安裝在Server1上

[ServiceContract] 
IService1 
{ 
    [OperationContract] 
    Operation1(); 
} 

安裝在Server2上

[ServiceContract] 
IService2 
{ 
    [OperationContract] 
    Operation2(); 
} 
客服2

和客戶端正在使用這兩種服務

using (TransactionScope ts = new TransactionScope()) 
{ 
    Service1Proxy.Operation1(); 
    Service2Proxy.Operation2(); 
} 

我應該在哪裏正好安裝MSDTC,做到這一點需要要在 服務器1,服務器安裝和客戶端

是它需要在這種情況下,任何額外的配置?

回答

1

你將不得不對客戶端和服務器1,服務器2

使MSDTC你應該允許出境的MSDTC的客戶端上的安全配置。
您應該允許服務器上的入站和出站。
如果您的數據庫位於單獨的計算機上,則應允許入站。

我跑到使用MSDTC的一個問題是不要忘記在防火牆的例外列表中允許MSDTC。

查看您的代碼片段,您還需要在操作界面上添加Transactionflow attribut。

這裏是交易一個很好的鏈接,WCF:Foundation: Transaction Propagation

+0

嗨pididdy, 感謝您迴應我的查詢。 我已經在配置文件中設置了transaflow設置 transactionFlow =「true」 沒關係,我需要事務流屬性爲服務接口中的每個方法。 – Brainchild 2010-01-12 05:28:32

+0

是的,你需要把每個服務操作的屬性。閱讀我的答案中的文章,這是一個很好的開始。 – pdiddy 2010-01-12 13:41:57

+0

當然,您只需要將操作中的屬性設置爲事務性操作即可。 – pdiddy 2010-01-12 16:00:49

0

我會小心這個設置。我已經使用「TransactionScope」以編程方式執行我想爲測試目的運行的SQL命令,然後回滾,但我沒有嘗試通過WCF調用傳播「TransactionScope」。

粗略的Google搜索在MSDN上發現了此文檔:http://msdn.microsoft.com/en-us/magazine/cc163432.aspx。本文檔說明您需要服務接口上的特殊屬性來使您的TransactionScope跨服務邊界。

至於「安裝」MSDTC,你不會安裝它。它應該已經成爲Windows安裝的一部分。但是,默認情況下,MSDTC不能與網絡上的遠程客戶端一起使用;此設置是出於安全目的。以下鏈接顯示如何在Windows Server 2003中啓用MSDTC以與遠程客戶端協同工作:http://support.microsoft.com/kb/817064。對於其他版本的Windows,請嘗試使用谷歌搜索「MSDTC網絡訪問」。我相信您需要在託管要包含在遠程事務中的服務的每臺服務器上設置此配置。

WCF服務配置所有不同的可能設置非常棘手。我希望這可以幫助你開始。

相關問題