據我所知,ASP.NET WEB API的構建是爲了幫助實現基於輕量級REST的應用程序。但是,我需要我的REST服務是交易/成爲交易的一部分。我試圖環顧四周,但看起來沒有辦法將WEB API作爲客戶端發起的事務的一部分。有沒有辦法做到這一點?使用ASP.net WEB API進行交易
問候 賈格迪什
據我所知,ASP.NET WEB API的構建是爲了幫助實現基於輕量級REST的應用程序。但是,我需要我的REST服務是交易/成爲交易的一部分。我試圖環顧四周,但看起來沒有辦法將WEB API作爲客戶端發起的事務的一部分。有沒有辦法做到這一點?使用ASP.net WEB API進行交易
問候 賈格迪什
我相信你指的是分佈式事務(通過MSDTC),它可以在服務邊界傳播。
然而,因爲根本就沒有辦法了普通的HTTP請求來傳播和管理事務狀態在WCF RESTful服務分佈式事務是不可能的。
您可能想通過HTTP(wsHttpBinding)或TCP/IP(net.tcp)查看普通的WCF服務,甚至可以看看WCF Data Services。
在交易謀取服務電話通常被認爲是一個SOAP行爲不是一個REST的行爲。至少有一種使用稱爲WS-AtomicTransaction的SOAP進行標準化的方法。
正在SOAP爲本,這是沒有明確由ASP.Net的Web API的支持,但支持WCF
http://msdn.microsoft.com/en-us/library/ms730266
這將有可能自己實現在REST類似一個類似的行爲,但做得可靠卻相對複雜。
+1速度更快... ...而:) –
「但它比較複雜,做得可靠。」 - 關於如果我們想要實現它的方法會有什麼想法? – user1496864
如果你控制導線的兩端,可以實現你想要的。
的TransactionInterop類存在於用於與進程邊界之間的交易工作,利用MS DTC提供支持。
它包含兩個方法,這是有趣的您的方案:
GetTransmitterPropagationToken
- 這得到可用於當前進程之外傳播事務的令牌。
GetTransactionFromTransmitterPropagationToken
- 這需要一個傳播標記,並用它來構建交易的本地服務。
您可以使用客戶端中的第一種方法來生成事務。您可以將其設置爲自定義標題值或Cookie以將其傳遞給您的服務。一旦使用服務,您可以使用第二種方法在本地創建事務。
主要告誡這是MS DTC將需要啓用,並在客戶端和服務器配置。這隻有在Windows Active Directory域中調用服務時才能實現。
您認爲交易是什麼?一個通用的工作單元?一個'DbTransaction'或一個'SqlTransaction'? – jrummell
我一直在尋找具有DTC管理的事務,但它看起來像WEB API犯規支持它 – user1496864