【问题标题】:WebClient Timeout solution doesn't work (subclassing to set Timeout)WebClient 超时解决方案不起作用(子类化设置超时)
【发布时间】:2015-06-30 11:38:54
【问题描述】:

我正在尝试将其用作为 WeblClient 调用设置超时的普遍接受的解决方案。在我从离线机器请求 url 的测试用例中:当设置为 1 秒时,我始终得到 20 秒的超时。

public class TimeoutWebClient : WebClient
{
    public TimeoutWebClient(TimeSpan timeout)
    {
        _timeout = timeout;
    }
    private TimeSpan _timeout;

   protected override WebRequest GetWebRequest(Uri address)
   {
       WebRequest request = base.GetWebRequest(address);
       request.Timeout = (int)_timeout.TotalMilliseconds;
       return request;
   }
}

在这种情况下,基于服务器的超时无关紧要。我可能会错过什么?

我确实找到了一个设置HttpWebRequest.ReadWriteTimeoutHttpWebRequest.ServicePoint.MaxIdleTime 的sn-p。但是将这些设置为超时值仍然没有任何区别,并且仍然会出现约 20 秒的超时。

关于什么可能导致这种行为的任何其他想法?

【问题讨论】:

  • 没人能重现超时不被尊重吗?或者也许它在我的盒子上。
  • 我也遇到了同样的问题。让我们知道您是否已解决或解决它。
  • 我最终在包装类中使用了一个单独的计时器,它在所需的时间取消请求。留下这个问题以获得真正的答案。

标签: c# timeout webclient


【解决方案1】:

你有没有可能使用异步下载方法?

来自 MSDN:

Timeout 属性仅影响使用 GetResponse 方法发出的同步请求。要使异步请求超时,请使用 Abort 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2011-08-09
    相关资源
    最近更新 更多