c# - net - Prevenir o manejar el tiempo de espera con XmlReader.Create(uri)
enablecors c# (1)
A veces obtengo una excepción de tiempo de espera al leer un XML a través de una URL. ¿Hay algo que pueda hacer para evitar esto o es un problema con el servidor remoto? A continuación está mi código simple:
XmlDocument doc = new XmlDocument();
doc.Load(XmlReader.Create(this.RssUrl));
Veo una publicación que dice que KeepAlive puede ayudar, pero no sé cómo pasar esa configuración al código anterior (o si esa es la solución correcta): http://www.velocityreviews.com/forums/t95843- system-webexception-the-operation-has-timed-out.html
Esta es la excepción, ¡por favor ayuda!
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
Tuve este problema antes y encontré esta pregunta sin respuesta. Una opción que he encontrado es evitar el tiempo de espera de la solicitud, que puede hacer creando su propia WebRequest con un tiempo de espera de Timeout.Infinite y pasándola al 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...
}
También puede configurar KeepAlive si usa HttpWebRequest, aunque en realidad es cierto de manera predeterminada, por lo que no debería hacer ninguna diferencia.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RssUrl);
request.KeepAlive = true;