最近在请求内网MIS系统的某一接口时,发现请求超时了。一开始以为网络卡,延长请求超时时间到1分钟,依然超时。

加断点调试,发现请求Requeset请求一直卡在ReadToEnd()

using (Stream streamReceive = response.GetResponseStream())
 {
    using (StreamReader streamReader = new StreamReader(streamReceive, encoding))
    {
        string strResult = streamReader.ReadToEnd();
        try
        {
            return strResult;
        }
        catch (Exception ex)
        {
            return ex.Message;
        }
     }
  }

查询了一下,发现原因出在了HTTP协议的版本上。

内网MIS服务器的HTTP版本是1.1,发送request后,response不会断开,所以ReadToEnd()就会读不完数据,造成一直卡在这里。

所以解决办法有两个:
1.设置request的http版本为1.0

request.ProtocolVersion=HttpVersion.Version10;

2.不使用ReadToEnd(),而是根据response里和content_length长度来决定需要读多少字节。读到够数就立刻关闭。

最后修改:2022 年 10 月 12 日
如果觉得我的文章对你有用,请随意赞赏