6

HttpWebRequests 的 ReadWriteTimeout 似乎默认为 5 分钟。

有这么高的原因吗?我试图将 API 调用的超时设置为 10 秒,但它旋转了超过 2 分钟。

当我将其设置为 30 秒时,它现在会在合理的时间内超时。

设置得太低有危险吗?

我无法想象在我的应用程序中花费超过 20-30 秒的时间(小的 2-30kb 有效负载)。

参考:http: //msdn.microsoft.com/en-us/library/system.net.httpwebrequest.readwritetimeout.aspx

4

4 回答 4

25

当然,5分钟超时是有原因的。它看起来像这样:

在此处输入图像描述

这个装置是国际射电天文学研究中心使用的自动磁带检索系统。它存储 32.5 PB 的历史数据。当它的服务器收到一个 HttpWebRequest 时,机器会发送机器人来检索带有数据的磁带。正如您可能想象的那样,这需要一段时间。

这些系统在十年前相当普遍,大约在 .NET 设计的时候。今天没有那么多,硬盘存储容量的不懈改进使它们几乎过时了。尽管超过 5 PB 的 SAN 存储仍然会让您花掉一大笔钱。如果速度不是必需的,那么磁带很难被击败。

显然,当.NET 对线路另一端发生的事情一无所知时,它不可能可靠地声明超时。所以默认值很高。如果您有充分的理由相信您的特定设置存在上限,那么请不要犹豫,降低它。一定要让它成为一个可编辑的设置,你无法预测未来。

于 2013-02-02T21:36:22.613 回答
7

您不可能知道用户连接到您网站的连接速度。作为该框架的创建者,您也不知道开发人员将托管什么。这个类已经存在于 .NET 1.1 中,所以存在了很长时间。那时用户的速度也较慢。

找到一个好的默认值是非常困难的。您不想将其设置得太高以防止安全漏洞,也不想将其设置得太低,因为这会导致一百万个(夸大的)线程和有关中止请求的请求。

对不起,我不能给你任何官方消息,但这只是合理的。

于 2013-01-29T07:38:41.000 回答
3

为什么是 5 分钟?为什么不? JustAnotherUserYouMayKnow给你解释得很好。但是像往常一样,您可以自由地将这个默认值更改为适合您的情况的值,因此请随意遵循Christian指出的路径。

当我们谈论数百万用户并且可能涉及数百万可能的场景时,设置默认值根本不是一件容易的事。

最重要的是,为什么它是 5 分钟并不重要,而是如何根据自己的需要调整它。

于 2013-02-02T20:18:42.327 回答
0

好吧,通过将其设置得如此之低,您可能会或可能会引入一系列问题。由于您可能能够在合理的时间内到达该站点,因此其他人可能无法到达。

一个完美的例子是 Verizon,他们调用了一系列Proxy Servers可以大大减慢连接速度的方法。我提出这样一个例子的原因;Timeout是我们的应用程序在抛出异常前一分钟指定的。

我们的服务器对大量请求没有问题,它很容易处理它们。但是,我们在世界各地的一些用户收到此错误:错误 10060

问题可能来自不正确的路由Proxy ConfigurationInvalid Registry Key实际处理Timeout请求的路由。

您会认为一分钟确实足够快,但实际上并非如此。与这个客户的特定网络一样,它不能足够快地虹吸数据 - 因此会导致错误。

所以你问:

为什么 HttpWebRequest ReadWrite Timeout 默认为五分钟?

他们试图解释最小的公分母。

简单地说,每个网络和客户端在移动到所需位置时可能会有大量流量或延迟。如果它无法在您的端口理想套接字请求中到达目的地,您的用户将遇到异常。

关于网络的一些非常重要的事情:

  • 某些配置的网络具有有限的跳数/生存时间。
  • 过滤数据和安全性很重的代理和防火墙可能会延迟您的流量。
  • 有些地区没有高速光纤或电缆。他们可能依赖 Satellite 或 DSL。
  • 每个网络协议都是不同的。

这些是您必须考虑的一些变量。如果我们谈论的是互联网;每个客户端都有一个家庭网络;连接到 ISP;连接到互联网;连接到你。因此,您需要聚合多种形式的流量。

如果我们谈论的是 Intranet,使用大多数现代技术,您的时间成为问题的可能性很小,但仍有可能。

此外,每台单独的计算机都可能参与或导致问题。在 Windows 8 中,为浏览器指定的默认Timeout值为一分钟;在某些情况下,这些用户可能会在您的应用程序、站点或其他方面遇到异常。因此,您将手动更改注册表中的ServerTimeOutandTimeOut键以分配更长的值。

简而言之:

  • 客户端计算机在您分配的时间内到达您的站点可能会造成问题。
  • 网络 / ISP 可能会给某些用户带来问题。
  • 您的服务器可能配置不正确或未分配正确的时间。

这些都是需要考虑的变量;因为它们会影响对您的应用程序的访问。不幸的是,在它启动并且用户开始使用您的网站之前,您无法确定。

不幸的是,您不知道您指定的时间是否足够;但它默认为更高的数字,因为世界各地存在如此多的变化,以至于它试图考虑最小的公分母。因为您的目标是接触尽可能多的人。

顺便说一句,非常好的问题,到目前为止也有一些很好的答案。

于 2013-02-04T20:37:04.653 回答