2009-04-15 17 views
2

Ich versuche, eine Methode in C# zu erstellen, um eine Zeichenfolge des HTML-Inhalts einer Webseite aus der URL zurückzugeben. Ich habe mehrere verschiedene Möglichkeiten ausprobiert, aber ich erhalte den Fehler System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Bei einem Empfang ist ein unerwarteter Fehler aufgetreten.System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Ein unerwarteter Fehler trat bei einem Empfang auf

folgende Arbeiten vor Ort in Ordnung, aber wird den obigen Fehler, wenn sie auf einem Remote-Server ausgeführt wird:

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

Nur um sicher zu sein, kann die problematische URL mit einem Webbrowser oder einem anderen HTTP-Client angefordert werden? Gibt es zufällig einen Proxy für Internet Explorer eingerichtet oder erfordert der Remote-Server Authentifizierung wie NTLM? – Lucero

Antwort

1

Danke für die Antworten, das Problem lag an einem DNS-Problem auf dem Remote-Server! Nur um zu bestätigen, ging ich mit dem folgenden Code am Ende:

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

Ich bin gespannt, was das DNS-Problem war? Ich erhalte denselben Fehler auf unserer Entwicklungsmaschine, aber nicht auf unserer Produktionsmaschine, obwohl identische Code- und Konfigurationsdateien vorhanden sind. –

+0

Wie haben Sie das erwähnte Problem behoben, weil ich diesen Fehler immer noch von Ihrem Code erhalte? – Hamid

0

ein Problem wie dieses Hatte vorher mit der durch das Öffnen der URL im Internet Explorer auf der Maschine gelöst wurde Problem. Der IE fragt Sie dann, ob Sie die URL zur Liste der sicheren Sites hinzufügen möchten. Fügen Sie es hinzu und es funktioniert für diese URL.

Dies ist nur eine der möglichen Ursachen. Ernsthaft viele andere Probleme könnten dies verursachen. Neben dem oben beschriebenen Problem ist der beste Weg, den ich gefunden habe, um das Problem zu lösen, die Ausnahme zu fangen und die Anfrage erneut zu versuchen.

2

Dies ist wahrscheinlich nicht das Problem, sondern versuchen Sie Folgendes:

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

ich echo die frühere Antwort, die Sie mit einem bekannten guten URL versuchen, dies vermuten läßt. Ich füge hinzu, dass Sie dies mit einer bekannten guten HTTP 1.1-URL versuchen sollten, indem Sie die Zeile auskommentieren, die die Version auf 1.0 setzt. Wenn das funktioniert, dann werden die Dinge erheblich eingeschränkt.

Verwandte Themen