我知道ASP.NET WEB API是为了帮助实现轻量级的基于REST的应用程序。然而,我需要我的REST服务能够进行事务处理/成为事务的一部分。我尝试过寻找相关信息,但似乎没有办法将WEB API作为客户端发起的事务的一部分。是否有方法可以实现这一点?
问候, Jagadish
问候, Jagadish
GetTransmitterPropagationToken
- 这获取一个令牌,可用于将事务传播到当前进程之外。
- GetTransactionFromTransmitterPropagationToken
- 这需要传播令牌并使用它在本地服务中构建事务。http://msdn.microsoft.com/en-us/library/ms730266
您可以在REST中自己实现类似的行为,但要可靠地完成相对复杂。
分布式 WEB API 事务(跨应用程序域)
为了使我的 ASP.NET WEB API 支持事务或成为事务的一部分(通过 MSDTC 传播到服务边界),我实现了一个 Web API 的 Action Filter,该过滤器获取 客户端请求发送的事务标记 并将其用于 在相同客户端范围事务中注册服务事务。
可以简单地将此过滤器应用于 Web API 操作:
[HttpPost]
[EnlistToDistributedTransactionActionFilter]
public HttpResponseMessage Post(string id)
{
...
}
客户端应用程序只需打开事务并将其传递到请求中:
using (var scope = new TransactionScope())
{
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Post, "https://acme.com/api/order", id)))
{
// extension method that forward transaction token to Web API
request.AddTransactionPropagationToken();
var response = client.SendAsync(request).Result;
response.EnsureSuccessStatusCode();
}
}
}
更多详细信息、示例和源代码,请访问此处: https://www.c-sharpcorner.com/article/distributed-transactions-with-webapi-across-application-domains/
DbTransaction
或者SqlTransaction
? - jrummell