1
我有以下POST編輯的操作方法,它主要執行兩個更新操作: -處理併發異常與外部API調用
- 編輯外部系統起訴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) {
如上面的代碼中,我不會做repository.save()來更新我們的系統上的對象,除非API返回一個「成功」的顯示。 但目前我正面臨以下問題: - 如果API返回「成功」但發生了併發異常,那麼API將更新外部系統上的對象,但該對象不會在我們的系統上更新? 那麼有沒有辦法來處理這種情況?
感謝您的回覆,不幸地要求修改API是不可能的,因爲我們從外部公司購買它。 –