2017-11-10 12 views
0

次の問題があります。 getResponse()メソッドを呼び出すと、次のエラーメッセージが表示されます。基になる接続が閉じられました:送信時に予期しないエラーが発生しました。 (.Net Framework 4.0)HttpWebResponse req.GetResponse()が失敗する

  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

コールスタックを含む*完全な例外メッセージを送信します。これは 'Exception.ToString()'で簡単に得ることができます。 –

+0

好奇心をそらして: 'https'ではなく' http'をプレーンにするとどうなりますか?私はそのURLが両方をサポートしていることを知っているそれをスピンアップしてもらえますか? –

+0

@PanagiotisKanavosこれは結論に飛びつく非常に迅速な方法です。それは**何も**のような**です。これは単なるテストです:もしそれがプレーンなHTTP上で動作するならば、問題はTLSプロトコルのバージョンに起因する可能性があります。その場合、.NET 4.0用のものも含めて、既にSO上にあります。あなたの編集のためにEDIT:サイトのセキュリティバグですが、ここではデバッグをしています。問題を解決するために試してみる必要があります。 –

答えて

0

フレームワークをサポートされているバージョンにアップグレードします。サポートされている最も古い.NETバージョンは4.5.2ですが、最低でも4.6を推奨します。

このURLを確認すると、ターゲットサイトでTLS1.2が使用されていることがわかります。 .NET 4.5ではTLS1.2のサポートが追加されました。それは4.6のデフォルトになった。 .NET 4.0だけデフォルトとしてTLS1.2を使用していないの.NETバージョンではありませんサポートTLS1.2

を行い、あなたがServicePointManager.SecurityProtocol設定を設定することによって、それを要求することができます。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

.NET 4.0では、ハックを使用して.NET 4.5.2ランタイムをインストールすることができます。 Tls12値は存在しませんが、あなたはまだ数値を設定することができます:私はこれに対して助言

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 

を。 4.0と4.5.2の間に重大な互換性の問題はありません。 4.5.2ランタイムで4.0アプリケーションを実行すると、それらのすべてを得ることができますが、メリットはありません。

+0

ServicePointManager。セキュリティプロトコル=(SecurityProtocolType)3072;私の問題は解決しました。将来私は.Net 4.5.2 Framework 4.5.2に変更します。 – Jacky

関連する問題