.net 4.5.2 の環境でAzure Searchを使用していたら 既存の接続はリモート ホストに強制的に切断されました エラー

samatsu 4/13/2020 6437 N/A Azure Search

Azure Searchを使用しているプログラム(とうかこのサイトですが。。)が動かなくなったので、 pureview 版から、2019-05-06のAPIバージョンに対応したバージョンにバージョンを挙げたら、意味が分からない 次のメッセージが表示されてはまったので覚書のメモです。 

既存の接続はリモート ホストに強制的に切断されました。

説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Net.Sockets.SocketException: 既存の接続はリモート ホストに強制的に切断されました。

どうやら、.NET 4.5.2 では、TLS1.2に対応した通信をデフォルトでは行う設定になっていないことが原因のようです。

なので、Azure Searchへの呼び出しが発生するコードが実行される前に,次のコードを追加して問題を解決しました。

System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;

なお、.NET 4.6.2 以降はデフォルトでこのプロトコルも有効らしいです。