System.Net.WebException: La connexion sous-jacente a été fermée: Une erreur inattendue est survenue sur une réception

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

  •  09-09-2019
  •  | 
  •  

Question

Je suis en train de créer une méthode en C # pour retourner une chaîne de pages web contenu html de l'URL. Je l'ai essayé plusieurs façons différentes, mais je reçois l'erreur System.Net.WebException: La connexion sous-jacente a été fermée. Une erreur inattendue est survenue sur une réception

Ce qui suit fonctionne très bien localement, mais obtient l'erreur ci-dessus lors de l'exécution sur un serveur distant:

  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;
    }
Était-ce utile?

La solution 2

Merci pour les réponses, le problème était dû à un problème de DNS sur le serveur distant! Juste pour confirmer, je suis allé avec le code suivant à la fin:

    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;
    }

Autres conseils

Ceci est probablement pas le problème, mais essayez ce qui suit:

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();
            }
        }
    }
}

Je fais écho la réponse précédente que vous essayez ceci suggère une bonne connue URL. Je vais ajouter que vous devriez essayer cela avec une bonne connue URL HTTP 1.1, en commentant la ligne qui définit la version 1.0. Si cela fonctionne, il réduit considérablement les choses.

Il y avait un problème comme ça avant qui a été résolu en ouvrant l'URL dans IE sur la machine avec le problème. IE vous demande alors si vous voulez ajouter l'URL à la liste des sites sécurisés. Ajoutez et cela fonctionne pour cette URL.

Ceci est juste l'une des causes possibles. Sérieusement beaucoup d'autres problèmes pourrait causer cela. Outre le problème décrit ci-dessus, la meilleure façon que je l'ai trouvé à résoudre ce problème est juste attraper l'exception et essayez de nouveau la demande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top