使用XmlReader.Create(uri)防止或处理超时

时间:2010-08-23 13:20:43

标签: c# .net asp.net .net-3.5 xmlhttprequest

有时我通过URL读取XML时会遇到超时异常。有什么我可以做的,以防止这种情况,或者这是远程服务器的问题?下面是我的简单代码:

XmlDocument doc = new XmlDocument();
doc.Load(XmlReader.Create(this.RssUrl));

我浏览了一篇文章,其中说KeepAlive可能有所帮助,但我不知道如何将该设置传递到上面的代码中(或者如果这甚至是正确的解决方案):http://www.velocityreviews.com/forums/t95843-system-webexception-the-operation-has-timed-out.html

这是例外,请帮助!

Exception Details: System.Net.WebException: The operation has timed out
Stack Trace: 

[WebException: The operation has timed out]
   System.Net.HttpWebRequest.GetResponse() +5375213
   System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials) +69
   System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials) +3929371
   System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) +54
   System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext) +144
   System.Xml.XmlReader.Create(String inputUri) +8

1 个答案:

答案 0 :(得分:7)

我之前遇到过这个问题并发现了这个未解决的问题。我发现的一个选项是阻止请求完全超时,你可以创建自己的WebRequest,超时为Timeout.Infinite并将其传递给XmlReader。

WebRequest request = WebRequest.Create(this.RssUrl);
request.Timeout = Timeout.Infinite;

using (WebResponse response = request.GetResponse())
using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
{
    // Blah blah...
}

如果使用HttpWebRequest,也可以设置KeepAlive,虽然默认情况下它实际上是正确的,所以它不应该有任何区别。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RssUrl);
request.KeepAlive = true;