リモートコンピュータは、物理的に存在しないコンピュータです。ある種のコンピュータネットワークを介してのみアクセスできます。リモートホストは、リモートコンピューターをホストするネットワークをホストするコンピューターであり、リモートクライアントは、ネットワーク上のリモートクライアントのユーザーです。この機能は多くのプロセスに革命をもたらし、将来的にも大きな可能性を秘めています。
しかし、ごく最近、リモートホストに接続しようとしたときに、「既存の接続がリモートホストによって強制的に閉じられました」というエラーが報告されています。このエラーは、クライアントとサーバー間のソケット接続で発生します。この記事では、このエラーを完全に修正するためのいくつかの実行可能なソリューションを提供し、このエラーをトリガーする理由を通知します。
Windowsで「既存の接続がリモートホストによって強制的に閉じられました」エラーの原因は何ですか?
複数のユーザーから多数のレポートを受け取った後、問題を調査することを決定し、それを修正するための一連のソリューションを考案しました。また、トリガーされる理由を調査し、以下にリストしました。
- TLS 1.1 / 1.0の使用法:アプリケーションがTLS 1.1またはTLS 1.0で実行されている場合、減価償却が原因でこのエラーがトリガーされる可能性があります。TLS 1.2は、アプリケーションが使用するプロトコルを選択するときに使用する方法です。
- 暗号化が無効:お使いのマシンで暗号化が無効になっている場合、TLS 1.2の使用が妨げられ、TLS 1.0にフォールバックしてエラーが発生する可能性があります。
- ソケット実装:場合によっては、特定のタイプのソケット実装がエラーをトリガーします。「.NET」アプリケーションによる一部の実装にはバグがあり、このエラーが発生する可能性があります。
- コードの欠落: Entity Frameworkを使用していた一部の人々にとって、エラーがトリガーされたために、特定のコード行が欠落していることが確認されました。
- 古い「.NET」フレームワーク:「.NET」フレームワークが無効になっていると、このエラーが発生する場合があります。特定のタスクが正しく機能するためには、「。NET」フレームワークを最新バージョンに更新する必要があります。
これで問題の性質の基本を理解できたので、解決策に進みます。競合を回避するために、これらは提示されている特定の順序で実装してください。
解決策1:暗号化を有効にする
使用しているマシンで暗号化が無効になっている場合、TLS 1.2の使用は禁止されています。したがって、このステップでは、暗号化を有効にします。そのため:
- 「Windows」+「R」を押して、実行プロンプトを開きます。
- 入力し、「regeditを」押し「入力「。
- 次のアドレスに移動します
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031
右側のペインに「SchUseStrongCrypto」の値がない場合は、このアドレスに移動します。
HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319
- 右側のペインで、「SchUseStrongCrypto」オプションをダブルクリックし、値のデータとして「1」を入力します。
- 「OK」をクリックして変更を保存し、問題が解決するかどうかを確認します。
解決策2:TLS 1.2の使用を強制する
アプリケーションがTLS 1.2ではなくTLS 1.1またはTLS 1.0を使用するように構成されている場合、このエラーがトリガーされる可能性があります。したがって、この手順では、TLS 1.2を使用するようにコンピューターを構成します。そのため:
- サイトのルートに移動し、「global.asax」ファイルを右クリックします。
- リストから「コードの表示」を選択します。
- 「Application_Start」メソッドが必要です。そのメソッドに次のコード行を追加してください
if(ServicePointManager。SecurityProtocol。HasFlag(SecurityProtocolType。Tls12)== false)SecurityProtocolType。Tls12;
- 変更を保存し、問題が解決するかどうかを確認します。
解決策3:ソケットの実装を変更する
特定のソケット実装にバグまたはグリッチがある場合、このエラーがトリガーされる可能性があるため、アプリケーションの特定の要素が正しく機能しなくなる可能性があります。したがって、このステップでは、別の実装を使用するように構成します。そのため:
- 「StateObjec t」クラスがあり、「public byte [] buffer = new byte [1024]、public Socket socket;であることを確認してください。「
- 「Receive(Socket s)」関数を呼び出し、「void ReceiveCallback(IAsyncResult ar)」で次のコードを呼び出します
SocketError errorCode ; int nBytesRec = socket . EndReceive ( ar , out errorCode ); if ( errorCode != SocketError . Success ) { nBytesRec = 0 ; }
- このコードを実装した後も問題が解決するかどうかを確認してください。
解決策4:コマンドラインを追加する(Entity Frameworkのみ)
Entity Frameworkを使用している場合、特定のコード行が欠落している可能性があります。したがって、このステップでは、この問題を修正するためにそのコード行を追加します。そのため:
- あなたの「開く.edmx」ファイルをし、「開く.context.ttその下の」ファイルを。
- 「.context.cs」ファイルを開き、次のコード行をコンストラクタに追加します
public DBEntities () : base ( "name=DBEntities" ) { this . Configuration . ProxyCreationEnabled = false ; // ADD THIS LINE ! }
- このコード行を追加した後も問題が解決するかどうかを確認してください。
解決策5:.NET Frameworkを更新する
すべてがスムーズに機能するためには、「。NET」フレームワークの最新バージョンが必要です。したがって、このステップでは、サイトから最新バージョンをダウンロードしてインストールします。そのため:
- このリンクに移動して、セットアップをダウンロードします。
- 「.exe」ファイルを実行して、インストールプロセスを開始します。
- 画面の指示に従って、アプリケーションをコンピューターにインストールします。
- インストールの完了後も問題が解決するかどうかを確認してください。