主に2つの更新アクションを実行する次のPOST編集アクションメソッドがあります:-
- API 呼び出しを使用して、外部システム上のオブジェクトを編集します。
システム データベースのオブジェクトを編集します。
[HttpPost] public ActionResult Create(RackJoin rj, FormCollection formValues) {string controllername = RouteData.Values["controller"].ToString(); if (ModelState.IsValid) { var message = ""; var status = ""; long assetid = new long(); XmlDocument doc = new XmlDocument(); using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty); foreach (string key in formValues) { query[key] = this.Request.Form[key]; } query["username"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"]; query["password"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"]; string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"]; var url = new UriBuilder(apiurl); url.Query = query.ToString(); try { string xml = client.DownloadString(url.ToString()); doc.LoadXml(xml); status = doc.SelectSingleNode("/operation/operationstatus").InnerText; message = doc.SelectSingleNode("/operation/message").InnerText; } catch (WebException ex) { ModelState.AddModelError(string.Empty, "Error occurred:" + ex.InnerException); } } if (status.ToUpper() == "SUCCESS") { repository.InsertOrUpdateRack(rj.Rack, User.Identity.Name, rj.Resource.RESOURCEID); repository.Save(); return RedirectToAction("Index"); } else { ModelState.AddModelError(string.Empty, message.ToString()); } } } catch (DbUpdateConcurrencyException ex) {
上記のコードに示されているように、API が「成功」を返さない限り、システム上のオブジェクトを更新するために repository.save() を実行しません。しかし、現在、私は次の問題に直面しています:- API が「成功」を返し、同時実行例外が発生した場合、API は外部システム上のオブジェクトを更新しますが、オブジェクトはシステム上で更新されませんか? この状況を処理する方法はありますか?