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