事务中去请求第三方接口,对方接口超时多久,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;
}
还有别的处理方式!欢迎交流!