数据和请求接口的事务一致性

20 篇文章 0 订阅

事务中去请求第三方接口,对方接口超时多久,DB事务也卡多久,知道接口返回再处理事务是否提交,当然这不是最好的解决方法,存在的缺点:1,占库,2,等待接口响应时间可能比较长

贴上点代码吧!

 

        private void button1_Click(object sender, EventArgs e)
        {

            DbContext context = new DbContext();
            SqlSugarClient sqlSugarClient = context.Db;
            try
            {

                sqlSugarClient.BeginTran();
                string sqlmidStr = string.Format(@" INSERT INTO  [Student]
                ([StuName]
                ,[StuSex]
                ,[StuBir]
                ,[Math]
                ,[English]
                ,[Chinese]
                ,[Classes])
                VALUES
                      (@StuName
                      , @StuSex
                      , @StuBir
                      , @Math
                      , @English
                      , @Chinese
                      , @Classes) ");
                SugarParameter[] list = new SugarParameter[] {
                                new SugarParameter("@StuName","小王"),
                                 new SugarParameter("@StuSex","男"),
                                  new SugarParameter("@StuBir","11"),
                                   new SugarParameter("@Math","33"),
                                    new SugarParameter("@English","4"),
                                    new SugarParameter("@Chinese","6"),
                                      new SugarParameter("@Classes","3")

                  };

                int res = sqlSugarClient.Ado.ExecuteCommand(sqlmidStr, list);

                //同步的网络请求才行
                string resstr = HttpGet("https://suggest.taobao.com/sug?code=utf-8&q=%E7%94%B7%E5%8D%AB%E8%A1%A3&callback=cb"); 
                if (resstr.Contains("男))
                {
                    sqlSugarClient.CommitTran();
                }
                else
                {
                    sqlSugarClient.RollbackTran();
                }
                //这么做的缺点:1,占库,2,等待接口响应时间可能比较长
            }
            catch (Exception)
            {
                sqlSugarClient.RollbackTran();
            }

        }

        public static string HttpGet(string Url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            request.Timeout = 1000 * 60 * 3;//3分钟
            request.ContinueTimeout = 1000 * 60 * 3; //等待3分钟,这么久都没处理好,对方接口写的就有些糟糕了,
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
            return retString;
        }

还有别的处理方式!欢迎交流!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值