2009-04-15 7 views
2

J'essaie de créer une méthode en C# pour renvoyer une chaîne d'un contenu html de pages Web à partir de l'URL. J'ai essayé plusieurs manières différentes, mais j'obtiens l'erreur System.Net.WebException: La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite sur une réception.System.Net.WebException: La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite sur une réception

Les travaux suivants fins 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; 
    } 
+0

Juste pour être sûr, l'URL problématique peut être demandée en utilisant un navigateur Web ou un autre client HTTP? Existe-t-il un proxy configuré pour Internet Explorer ou est-ce que le serveur distant requiert une authentification telle que NTLM? – Lucero

Répondre

1

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

Je suis curieux de savoir quel était le problème DNS? Je reçois cette même erreur sur notre machine de développement mais pas sur notre machine prod malgré le code et les fichiers de configuration identiques. –

+0

Comment avez-vous corrigé le problème mentionné, car je reçois toujours cette erreur de votre code! – Hamid

0

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 souhaitez ajouter l'URL à la liste des sites sécurisés. Ajoutez-le et cela fonctionne pour cette URL.

Ceci est juste l'une des causes possibles. Sérieusement, beaucoup d'autres problèmes pourraient causer cela. En plus du problème décrit ci-dessus, le meilleur moyen que j'ai trouvé pour résoudre ceci est le juste attraper l'exception et réessayer la demande.

2

Ceci est probablement pas le problème, mais les opérations suivantes:

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

J'écho la réponse précédente que vous essayez ceci suggère une bonne connue URL. J'ajouterai que vous devriez essayer ceci avec une bonne URL HTTP 1.1 connue, en commentant la ligne qui définit la version à 1.0. Si cela fonctionne, cela rétrécit considérablement les choses.

Questions connexes