Header Ads

[C#][エラー対策][System.Net.WebException]:基礎になる接続が閉じられました

過去の遺産である、VS2008で作成した.NetFrameWork3.5のアプリケーションを
久しぶりに動作させたところ、
「System.Net.WebException」
「基礎になる接続が閉じられました: 送信時に、予期しないエラーが発生しました。」
といったエラーが発生した。

解決に至るまでの対策をメモしておく。

(原因)
「基礎になる接続が閉じられました: 送信時に、予期しないエラーが発生しました。」
このエラーの原因は、
「TLS 1.0 をブロックし、TLS 1.1 または 1.2 のいずれかを使用してデータを送信する必要がある」ことが原因であった。

過去のアプリでは、「WebClient webClient = new WebClient();」を
.NetFrameWork3.5で使用していたため、
TLS1.1、TLS1.2に対応できていなかった。

(解決方法) 
例)
VS2008で作った.NetFramework3.5のプロジェクトをVS2019で開いて、コンバートする。
コンバートは、ソリューションエクスプローラ上のプロジェクト名を右クリックして、
「再読み込み」を実行することで表示されるダイアログ内容を確認して、
新しいプロジェクトへ自動変換するだけでOK。


コンバートが完了後、ソリューションエクスプローラ上のプロジェクト名を右クリックして、
プロパティを表示→アプリケーション→対象のフレームワークで
.Net Framework 4.5に変更(TLS1.1、TLS1.2をサポートしていればOK)。

コードの書き換え
・対応前のコード 

WebClient webClient = new WebClient();



・対応後のコード 

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
WebClient webClient = new WebClient();

上記対応を行うだけで、過去の遺産のアプリでも、
問題なく、Web通信が可能になった。


0 件のコメント