最近在请求内网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长度来决定需要读多少字节。读到够数就立刻关闭。


本文由 昔牧 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论