System.Net.WebException: la conexión subyacente se cerró: Se ha producido un error inesperado en un recibir

StackOverflow https://stackoverflow.com/questions/751056

  •  09-09-2019
  •  | 
  •  

Pregunta

Estoy intentando crear un método en C # para devolver una cadena de páginas web de contenido HTML de la URL. He intentado varias maneras diferentes, pero estoy consiguiendo el error System.NET.WebException: La conexión subyacente se cerró:. Se produjo un error inesperado de recepción

La siguiente funciona bien a nivel local, pero obtiene el error anterior cuando se ejecuta en un servidor remoto:

  public static string WebPageRead(string url)
    {
        string result = String.Empty;

        WebResponse response = null;
        StreamReader reader = null;

        try
        {
            if (!String.IsNullOrEmpty(url))
            {
                HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
                request.Method = "GET";
                request.KeepAlive = false;
                request.ProtocolVersion = HttpVersion.Version10;

                response = request.GetResponse();
                reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                result = reader.ReadToEnd();
            }
        }
        catch (Exception exc)
        {
            throw exc;
        }
        finally
        {
            if (reader != null)
            {
                reader.Close();
            }

            if (response != null)
            {
                response.Close();
            }
        }

        return result;
    }
¿Fue útil?

Solución 2

Gracias por las respuestas, el problema se debía a un problema de DNS en el servidor remoto! Sólo para confirmar, fui con el siguiente código en el final:

    public static string WebPageRead(string url)
    {
        string content = String.Empty;

        if (!String.IsNullOrEmpty(url))
        {
            HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;

            if (request != null)
            {
                request.Method = "GET";
                request.KeepAlive = false;
                request.ProtocolVersion = HttpVersion.Version10;

                try
                {
                    using (WebResponse response = request.GetResponse())
                    {
                        using (Stream stream = response.GetResponseStream())
                        {
                            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                            {
                                content = reader.ReadToEnd();
                            }
                        }
                    }
                }
                catch (Exception exc)
                {
                    throw exc;
                }
            }
        }                    

        return content;
    }

Otros consejos

Esto probablemente no es el problema, pero trata de lo siguiente:

public static string WebPageRead(string url)
{
    if (String.IsNullOrEmpty(url))
    {
        return null;
    }

    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
    if (request == null)
    {
        return null;
    }

    request.Method = "GET";
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;

    using (WebResponse response = request.GetResponse())
    {
        using (Stream stream = response.GetResponseStream())
        {
            using (StreamReader reader = 
                       new StreamReader(stream, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
}

Me hago eco de la respuesta anterior que sugiere que usted intenta esto con una buena URL conocido. Voy a añadir que usted debe tratar esto con una buena conocida URL HTTP 1.1, comentando la línea que establece la versión 1.0. Si funciona, entonces se estrecha considerablemente las cosas.

Tuvimos un problema como este antes de que se resolvió mediante la apertura de la URL en Internet Explorer en el equipo con el problema. IE entonces se le preguntará si desea añadir la URL a la lista de sitios seguros. Añádelo y funciona para esa URL.

Esto es sólo una de las posibles causas. En serio una gran cantidad de otros problemas podría causar esto. Además del problema descrito anteriormente, la mejor manera que he encontrado para resolver esto es el justo detectar la excepción y vuelva a intentar la solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top