我有一個方法從它調用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。如果您有任何問題,請提供反饋,謝謝 –