首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在HttpWebRequest中调整C#连接超时

在HttpWebRequest中调整C#连接超时
EN

Stack Overflow用户
提问于 2009-09-30 22:20:48
回答 4查看 123.4K关注 0票数 56

我相信经过长时间的研究和搜索,我发现我想要做的事情可能更好地服务于建立一个异步连接并在所需的超时之后终止它.但无论如何我还是会问的!

快速代码片段:

代码语言:javascript
运行
复制
HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(url);
webReq.Timeout = 5000;
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); 
// this takes ~20+ sec on servers that aren't on the proper port, etc.

我有一个HttpWebRequest方法,它位于一个多线程应用程序中,在这个应用程序中,我连接到大量的公司web服务器。在服务器没有响应的情况下,即使我指定的超时时间仅为5秒,HttpWebRequest.GetResponse()仍要花费大约20秒的时间来超时。为了定期通过服务器,我想跳过那些连接时间超过5秒的服务器。

因此,问题是:“是否有一种简单的方法来指定/减少WebRequest或HttpWebRequest的连接超时?”

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-01 02:41:24

我认为问题在于,WebRequest只在请求实际提出之后才测量时间。如果您将多个请求提交到相同的地址,那么ServicePointManager将限制您的请求,并且实际上只提交与相应的ServicePoint.ConnectionLimit值相同的并发连接,在默认情况下,该值来自ServicePointManager.DefaultConnectionLimit。应用程序CLR主机将此设置为2,ASP主机设置为10。因此,如果有一个向同一主机提交多个请求的多线程应用程序--实际上只有两个请求被放置在同一主机上,其余的将排队等待。

我还没有找到确凿的证据来研究这个问题是否真的会发生,但在类似的项目中,我的情况很糟糕,直到我取消了ServicePoint限制。

另一个需要考虑的因素是DNS查找时间。同样,我的信念没有确凿的证据支持,但我认为WebRequest不会将DNS查找时间与请求超时计算在内。在某些部署中,DNS查找时间可以显示为非常大的时间因素。

是的,你必须在WebRequest.BeginGetRequestStream (POST和内容)和WebRequest.BeginGetResponse (GETPOSTS)周围编写应用程序。同步调用不会扩展(我不会详细说明原因,但我确实有确凿的证据)。无论如何,ServicePoint问题与此是正交的:队列行为也发生在异步调用中。

票数 59
EN

Stack Overflow用户

发布于 2010-09-21 13:46:50

很抱歉,我插上了一条旧线,但我认为上面所说的话可能是不正确的/误导的。

据我所知,.Timeout不是连接时间,而是整个HttpWebRequest和响应生命周期的总时间。证明:

我设定:

代码语言:javascript
运行
复制
.Timeout=5000
.ReadWriteTimeout=32000

HttpWebRequest的连接和发布时间为26 for

但是随后的调用HttpWebRequest.GetResponse()以4974 of超时,从而证明5000 of是整个发送请求/获取响应集的时间限制。

我没有验证DNS名称解析是否是作为时间的一部分来测量的,因为这与我无关,因为这些都不是我真正需要的工作方式--我的目的是在连接到不接受连接的系统时更快地超时,就像它们在请求的连接阶段失败一样。

例如:对于有可能返回结果的连接请求,我愿意等待30秒,但我只想等待10秒,等待将请求发送到行为不正常的主机。

票数 39
EN

Stack Overflow用户

发布于 2010-01-28 00:33:55

来自HttpWebRequest.Timeout属性的文档:

域名系统(

)查询可能需要15秒才能返回或超时。如果请求包含需要解析的主机名,并且将超时设置为小于15秒的值,则可能需要15秒或更长时间才会引发WebException以指示请求的超时。

您的DNS查询是否可能是超时的原因?

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1500955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档