Предотвратить или обработать время ожидания с помощью XmlReader.Create (uri) - PullRequest
4 голосов
/ 23 августа 2010

Иногда я получаю исключение тайм-аута при чтении XML через URL. Что я могу сделать, чтобы предотвратить это, или это проблема с удаленным сервером? Ниже мой простой код:

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 Ответ

7 голосов
/ 13 октября 2010

У меня была эта проблема ранее, и я нашел этот вопрос без ответа.Опция, которую я нашел, состоит в том, чтобы вообще запретить тайм-аут запроса, что можно сделать, создав собственный 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...
}

Вы также можете установить KeepAlive, если используете HttpWebRequest, хотя на самом деле это правда по умолчанию, поэтому это не должно иметь никакого значения.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RssUrl);
request.KeepAlive = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...