我有一个方法从它调用Web Api。数据被插入到多个表中,因此添加了事务。以下是代码布局。管理跨多种方法和网络调用的交易
{
TransactionObject objTransaction = new TransactionObject();
try
{
//Create Order
order.insert(objTransaction);
//Create Delivery
address.insert(objTransaction);
//Call Generic Web API method to calculate TAX.
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:85766/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsJsonAsync("api/Tax/UpdateTax", order).Result;
if (response.IsSuccessStatusCode)
{
//Commit transactio
objTransaction.EndTransaction(true);
}
else
{
//Commit transactio
objTransaction.EndTransaction(false);
}
}
}
}
catch(Exception ex)
{
//Commit transactio
objTransaction.EndTransaction(false);
}
此方法调用web api来执行另一个数据库操作。 Web Api下面是一个称为form multiple places的通用方法。
[HttpPost]
public HttpResponseMessage UpdateTax(Order order)
{
TransactionObject objTransaction = new TransactionObject();
try
{
//DO calculation logic
.
.
//Insert Invoice
invoice.insert(objTransaction);
objTransaction.EndTransaction(true);
return Request.CreateResponse(HttpStatusCode.Created, "Invoice data added successfully");
}
catch (Exception ex)
{
objTransaction.EndTransaction(false);
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Erorr while adding invoice");
}
}
现在,如果在调用Web API之前发生异常,则所有事务都将被回滚。没事。 Web Api中发生异常也是如此。
如果以后网络API得到成功执行,而在main方法将事务会发生异常,如何处理它,我的意思是在下面的代码
if (response.IsSuccessStatusCode)
{
//Commit transactio
objTransaction.EndTransaction(true);
}
有没有更好的办法来处理逻辑是什么?
一个选项是使用['TransactionScope'] (https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope(v=vs.110).aspx)与环境事务选项。 – kayess
@ kayess:环境事务选项在网络调用中不起作用。我发布了一个答案,在网络上传输事务ID。如果您有任何问题,请提供反馈,谢谢 –