首页 新闻 会员 周边

在asp.net中异步http请求能缓解超时现象吗?

0
悬赏园豆:100 [已解决问题] 解决于 2014-03-22 23:37

问题是这样的,项目中有这样一处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()

我想问的是

  1. 发生这种超时一般有哪些原因?服务(http请求的接口)处理能力不足?...
  2. 针对1的结果有什么优化方法?
  3. 如果http请求我采用异步,比如BeginGetResponse能缓解超时的情况吗?
  4. .net的BeginGetResponse是异步IO吗?

鄙人不才,忘大牛不吝赐教!

zhanjindong的主页 zhanjindong | 初学一级 | 园豆:109
提问于:2014-03-19 18:43
< >
分享
最佳答案
1

你得先分析超时的具体原因,是 DNS Lookup 超时,还是 TCP Connect 超时,还是 Wait For Response 超时?

收获园豆:50
Launcher | 高人七级 |园豆:45045 | 2014-03-20 09:49
其他回答(5)
0

我之前做过一个抓取网页的程序,同样也遇到超时 当时是在公司,后来回到家里后居然又能正常运行,自己猜想有可能 

是端口 没有加入到防火墙中。

收获园豆:10
Zery | 园豆:6151 (大侠五级) | 2014-03-19 20:12
0

从你的代码看不出问题,你把时间打印下,看看是不是超时了?也可以参见我的这篇随笔:

http://www.cnblogs.com/nanfei/archive/2012/11/01/2576276.html

收获园豆:10
空明流光 | 园豆:106 (初学一级) | 2014-03-19 22:39

异步应该不能缓解超时现象

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-03-19 22:41

404啊

支持(0) 反对(0) zhanjindong | 园豆:109 (初学一级) | 2014-03-20 08:39

@zhanjindong: 404说明你给的url有问题

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-03-20 11:24

@沧海一杰: 大哥,我是说你给的链接404啊

支持(0) 反对(0) zhanjindong | 园豆:109 (初学一级) | 2014-03-20 19:38

@zhanjindong: 我打开都没问题,难道被屏了

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-03-21 19:50
0

这个跟你的系统没关系,你调用的URL都超时,你这边怎么弄都没用,应该去优化你调用的URL的响应速度.

所谓的异步也是需要连接的,有连接就会有超时

收获园豆:20
吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-20 09:34
0

检查下你要模拟请求的Url地址那边处理过程,看看那边的处理过程是否有问题,我之前也碰到这样的问题,两边都看看。

收获园豆:10
mczxmin | 园豆:196 (初学一级) | 2014-03-20 11:55
0

已解决。

zhanjindong | 园豆:109 (初学一级) | 2014-03-22 23:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册