【问题标题】:HttpWebRequest.Timeout Property behavior change between .NET 3.5 and 4.0?.NET 3.5 和 4.0 之间的 HttpWebRequest.Timeout 属性行为变化?
【发布时间】:2012-11-22 19:24:35
【问题描述】:

.NET 3.5 和 4.0 之间的 HttpWebRequest.Timeout 属性行为是否发生了变化?文档似乎暗示了这一点:

来自.NET 3.5 MSDN doc

超时是后续同步的毫秒数 使用 GetResponse 方法发出的请求等待响应,然后 GetRequestStream 方法等待一个流。如果资源不 在超时期限内返回,请求抛出 WebException 将 Status 属性设置为 WebExceptionStatus.Timeout。

.NET 4.0 doc在中间加上这句话:

超时适用于整个请求和响应,而不是 分别用于 GetRequestStream 和 GetResponse 方法调用。

这似乎是一个相当大的变化。 “整个请求和响应”可能意味着发送请求和接收响应所花费的全部时间。这似乎与前一句相矛盾,因为等待响应流准备好可能很快——基本上只是服务器检索/准备响应的时间——但是接收到 整个 响应流可能需要很长时间。

有没有人比较过 3.5 和 4.0 之间的这种行为?

【问题讨论】:

    标签: .net .net-4.0 httpwebrequest


    【解决方案1】:

    如果您查看 .net 代码(您引用的 msdn 文档页面)上的代码示例,请求和响应是两个独立的操作,因此请求的超时操作被复制到响应中。因此,如果默认值为 100 毫秒,则请求为 100 毫秒,响应为 100 毫秒,而不是两者的经过时间均为 100。

    请注意,如果您预计需要长时间运行的请求或响应,请考虑使用异步操作。

    【讨论】:

    • 那么为什么它会说“超时适用于整个请求和响应,而不是单独适用于 GetRequestStream 和 GetResponse 方法调用”?听起来这与您所描述的行为完全相反。
    • 这是文档构建者和开发者之间的经典问题。这不是我见过的第一个措辞不好的文档,除了我在源代码中验证了函数。
    • 我之前肯定见过糟糕的 MSDN 文档(stackoverflow.com/questions/9689839/…stackoverflow.com/questions/12207222/…,如果您觉得无聊并愿意阅读 :-) 当您说您验证了源代码中的功能时,您是是指Reflector或ILSpy之类的东西?如果是这样,我真的很感激。无论哪种方式,我都会提交一份关于 Connect 的文档错误报告。
    • 感谢提交错误连接!
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多