问题是这样的,项目中有这样一处http请求的代码:
HttpHelper.RequestPost(url, postData, ref responseJson, timeout); //反序列化获得的json response = (NoticeResponse)SerializeHelper.FromJson<NoticeResponse>(responseJson);
//do something
HttpHelper.RequestPost代码:
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url); //myReq.KeepAlive = false; myReq.Method = "POST"; myReq.Timeout = timeout; myReq.ContentLength = reqPkg.Length;
//下面都是网上找的各种优化方法 myReq.ServicePoint.Expect100Continue = false; //是否使用 Nagle 不使用 提高效率 myReq.ServicePoint.UseNagleAlgorithm = false; //最大连接数 myReq.ServicePoint.ConnectionLimit = 65500; Stream outStream = null; StreamReader sr = null; Stream receiveStream = null; WebResponse myResp = null; try { outStream = myReq.GetRequestStream(); outStream.Write(reqPkg, 0, reqPkg.Length); myResp = myReq.GetResponse(); receiveStream = myResp.GetResponseStream(); sr = new StreamReader(receiveStream); respPkg = sr.ReadToEnd(); } finally { if (outStream != null) outStream.Close(); if (sr != null) sr.Close(); if (receiveStream != null) receiveStream.Close(); if (myResp != null) myResp.Close(); if (myReq != null) myReq.Abort(); }
现网发现会报如下的超时错误:
System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse()
我想问的是:
鄙人不才,忘大牛不吝赐教!
你得先分析超时的具体原因,是 DNS Lookup 超时,还是 TCP Connect 超时,还是 Wait For Response 超时?
我之前做过一个抓取网页的程序,同样也遇到超时 当时是在公司,后来回到家里后居然又能正常运行,自己猜想有可能
是端口 没有加入到防火墙中。
从你的代码看不出问题,你把时间打印下,看看是不是超时了?也可以参见我的这篇随笔:
http://www.cnblogs.com/nanfei/archive/2012/11/01/2576276.html
异步应该不能缓解超时现象
404啊
@zhanjindong: 404说明你给的url有问题
@沧海一杰: 大哥,我是说你给的链接404啊
@zhanjindong: 我打开都没问题,难道被屏了
这个跟你的系统没关系,你调用的URL都超时,你这边怎么弄都没用,应该去优化你调用的URL的响应速度.
所谓的异步也是需要连接的,有连接就会有超时
检查下你要模拟请求的Url地址那边处理过程,看看那边的处理过程是否有问题,我之前也碰到这样的问题,两边都看看。
已解决。