2012-03-22 74 views
1

WCF服務被配置爲使用事務,WCF服務方法連接到SQL Server並進行更改。交易狀態在哪裏存儲?數據庫更改和事務完成之間會發生什麼,這個WCF服務將會被終止?WCF事務狀態存儲在哪裏?

回答

1

WCF依賴於用於事務管理的內置.NET System.Transactions功能。這MSDN article提供了WCF事務功能的一個很好的概述。

如果WCF服務在提交分佈式事務之前失敗,則屬於該事務的所有更改都將由分配的事務協調器回滾。這可能不僅僅是數據庫,而是其他服務調用註冊在同一個事務中。

+0

System.Trtansactions是否將事務狀態存儲在WCF服務應用程序的內存中?或者WCF只將事務從客戶端傳播到數據庫?如果客戶端創建兩個WCF服務調用(第一個到第一個物理機,第二個到另一個),它們都會成功,但在第二個服務調用之前第一個物理機被銷燬。在這種情況下交易將被提交嗎? – 2012-03-23 05:08:31

+0

對於分佈式事務,所有已登記的進程必須在分佈式事務管理器提交各個事務之前成功完成投票。這個「投票」必須在由分佈式事務管理器設置的超時期限過去之前發生。在你的假設情況下,破壞的計算機將無法投票或提交失敗,從而導致分佈式事務管理器回滾所有其他掛起的提交。至少這就是我理解MS DTC的工作原理。 – 2012-03-23 12:00:14

+0

那麼,這是否意味着WCF服務持有所有未完成事務的狀態?如果我們將服務的兩個實例放置到不同的物理機器中並將它們隱藏在本地平衡器後面,分佈式事務是否會工作?當請求由一個服務實例處理但投票的WS-Atomic消息轉到另一個服務實例時將會出現這種情況。 – 2012-03-23 12:02:08