2017-11-10 3 views
0

Ich habe das folgende Problem. Wenn ich die Methode getResponse() aufrufen, erhalte ich die folgende Fehlermeldung: Die zugrunde liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden. (.Net Framework 4.0)HttpWebResponse req.GetResponse() Failes

  HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/Bonn.json"); 
      req.Method = WebRequestMethods.Http.Get; 
      req.Accept = "application/json"; 
      req.ContentType = "application/json; charset=utf-8"; 

      string result = null; 
      using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse) 
      { 
       StreamReader reader = new StreamReader(resp.GetResponseStream()); 
       result = reader.ReadToEnd();} 
+0

Geben Sie die * full * -Ausnahmebedingung einschließlich der Aufrufliste ein. Sie können dies leicht mit 'Exception.ToString()' erreichen. –

+0

Aus Neugier: Was ist, wenn Sie einfach "http" anstelle von "https" ausprobieren? Ich sehe, dass diese URL beides unterstützt. Könnten Sie es bitte drehen? –

+0

@ PanagiotisKanavos das ist ein extrem schneller Weg, um Schlussfolgerungen zu springen. Es ist ** nichts ** so. Es ist nur ein Test: Wenn es über reines HTTP funktioniert, könnte das Problem an der TLS-Protokollversion liegen. In diesem Fall befindet sich die Antwort, einschließlich einer für .NET 4.0, bereits auf SO. EDIT für Ihre Bearbeitung: es ist in der Tat ein Sicherheitsfehler seitens der Website, aber hier sind wir Debuggen, und Sie müssen Dinge versuchen, um das Problem zu fixieren. –

Antwort

0

Aktualisieren Sie Ihr Framework auf eine unterstützte Version. Die früheste unterstützte .NET-Version ist 4.5.2, obwohl Sie 4.6 bevorzugen sollten.

Wenn Sie diese URL überprüfen, sehen Sie, dass die Zielwebsite wie gewünscht TLS1.2 verwendet. TLS1.2-Unterstützung wurde in .NET 4.5 hinzugefügt. Es wurde zu einem Standard in 4.6. .NET 4.0 nur nicht Unterstützung TLS1.2

In den .NET-Versionen, die nicht TLS1.2 als Standard verwenden, können Sie es durch Zugriff auf die ServicePointManager.SecurityProtocol Einstellung Einstellung:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

In .NET 4.0 Sie könnten einen Hack verwenden und die .NET 4.5.2-Laufzeit installieren. Der Tls12 Wert nicht existiert, aber man kann immer noch numerischen Wert gesetzt:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 

ich aber abraten. Es gibt keine schwerwiegenden Kompatibilitätsprobleme zwischen 4.0 und 4.5.2. Wenn Sie eine 4.0-Anwendung auf einer 4.5.2-Laufzeit ausführen, erhalten Sie alle, aber keinen der Vorteile.

+0

ServicePointManager. Sicherheitsprotokoll = (SecurityProtocolType) 3072; habe mein Problem behoben. In Zukunft werde ich zu .Net 4.5.2 Framework 4.5.2 wechseln. – Jacky