【问题标题】:How to specify timeout for XmlReader?如何为 XmlReader 指定超时?
【发布时间】:2011-06-16 02:03:54
【问题描述】:

我正在用 xml 阅读器阅读 rss。

当 url 错误时,它需要 60 秒才能失败。如何指定超时?

using (XmlReader reader = XmlReader.Create(url, settings))

【问题讨论】:

    标签: c# timeout xmlreader


    【解决方案1】:

    我不知道是否可以更改 XmlReader 超时,但也许您可以做一些不同的事情:

    使用 WebRequest 获取 xml(这确实有一个 Timeout 属性)并在您收到该 xml 后将其提供给 XmlReader:

    WebRequest request = WebRequest.Create(url);
    request.Timeout = 5000;
    
    using (WebResponse response = request.GetResponse())
    using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
    {
        // Blah blah...
    }
    

    【讨论】:

    • 您可能还想研究线程以将此进程转至后台线程,这样它就不会阻塞您的 UI,如果您担心的话。
    • 我期待这是唯一的选择。感谢您提供详细代码
    【解决方案2】:

    将您自己的流传递给 XmlReader.Create 调用。设置任何你喜欢的超时时间。

    【讨论】:

      【解决方案3】:

      您可以创建自己的 WebRequest 并从响应流创建 XmlReader。有关详细信息,请参阅对此问题的回复:

      Prevent or handle time out with XmlReader.Create(uri)

      【讨论】:

        【解决方案4】:

        另一种选择是这样做

        var settings = new XmlReaderSettings();
        settings.XmlResolver = resolver;
        
        // Create the reader.
        XmlReader reader = XmlReader.Create("http://serverName/data/books.xml", settings);
        

        resolver 实例是一个自定义类,可更改以下链接中的文档中所述的 url 获取行为。

        https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmlurlresolver?view=net-6.0#extending-the-xmlurlresolver-class

        【讨论】:

          猜你喜欢
          • 2016-04-17
          • 1970-01-01
          • 2012-01-13
          • 1970-01-01
          • 2014-10-31
          • 1970-01-01
          • 2011-04-27
          • 2015-01-20
          • 2014-12-27
          相关资源
          最近更新 更多