アカウントをロードし、Webサービスを呼び出して支払いを開始し、成功した場合はアカウントの残高を更新するという簡単な要件で、概念実証を作成しています。
次のコードの目的は、Webサービスの呼び出しが顧客の銀行からお金を引き出すことに成功したが、同時実行の問題のためにアカウントを保存できなかった場合に、何らかの取り消しが行われるようにすることです。ただし、応答が成功した場合でも、catchブロックのifテストがfalseを返し、例外が再スローされるという奇妙な問題がありますか?
編集開始:
response.IsSuccessful
であり、行で発生する場合、WEBSERVICE_SUCCESSFULと等しくないtrue
必要ConcurrencyException
がありますか?accountService.Save(account)
currentStatus
編集終了:
これはWebアプリケーションであり、Process()の呼び出しはフロントエンドによってトリガーされます。明らかな何かが欠けていますか?どんな助けでも本当にありがたいです。
function void Process(Account account, string param1, decimal param2) {
string currentStatus = "START";
try
{
log("Begin web service call");
var response = webservice.Call(param, param2);
log("End web service call");
if(response.IsSuccessful)
{
currentStatus = "WEBSERVICE_SUCCESSFUL";
//update account balance
accountService.Save(account);
}
else
{
// do something else
}
}
catch (ConcurrencyException ex)
{
log("Error concurrency..");
if( currentStatus == "WEBSERVICE_SUCCESSFUL")
//do reversal
else
throw ex;
}
}