1

主に2つの更新アクションを実行する次のPOST編集アクションメソッドがあります:-

  1. API 呼び出しを使用して、外部システム上のオブジェクトを編集します。
  2. システム データベースのオブジェクトを編集します。

    [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 は外部システム上のオブジェクトを更新しますが、オブジェクトはシステム上で更新されませんか? この状況を処理する方法はありますか?

4

1 に答える 1