修正方法‘既存の接続がリモートホストによって強制的に閉じられました’ エラー?

リモートコンピュータは、物理的に存在しないコンピュータです。ある種のコンピュータネットワークを介してのみアクセスできます。リモートホストは、リモートコンピューターをホストするネットワークをホストするコンピューターであり、リモートクライアントは、ネットワーク上のリモートクライアントのユーザーです。この機能は多くのプロセスに革命をもたらし、将来的にも大きな可能性を秘めています。

しかし、ごく最近、リモートホストに接続しようとしたときに、「既存の接続がリモートホストによって強制的に閉じられました」というエラーが報告されています。このエラーは、クライアントとサーバー間のソケット接続で発生します。この記事では、このエラーを完全に修正するためのいくつかの実行可能なソリューションを提供し、このエラーをトリガーする理由を通知します。

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の使用は禁止されています。したがって、このステップでは、暗号化を有効にします。そのため:

  1. Windows」+「R」を押して、実行プロンプトを開きます。
  2. 入力し、「regeditを」押し「入力「。
  3. 次のアドレスに移動します
    HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031

    右側のペインに「SchUseStrongCrypto」の値がない場合は、このアドレスに移動します。

    HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319
  4. 右側のペインで、「SchUseStrongCrypto」オプションをダブルクリックし、値のデータとして「1」を入力します。
  5. OK」をクリックして変更を保存し、問題が解決するかどうかを確認します。

解決策2:TLS 1.2の使用を強制する

アプリケーションがTLS 1.2ではなくTLS 1.1またはTLS 1.0を使用するように構成されている場合、このエラーがトリガーされる可能性があります。したがって、この手順では、TLS 1.2を使用するようにコンピューターを構成します。そのため:

  1. サイトのルートに移動し、「global.asax」ファイルを右クリックします。
  2. リストから「コードの表示」を選択します。
  3. Application_Start」メソッドが必要です。そのメソッドに次のコード行を追加してください
    if(ServicePointManager。SecurityProtocol。HasFlag(SecurityProtocolType。Tls12)== false)SecurityProtocolType。Tls12;              
  4. 変更を保存し、問題が解決するかどうかを確認します。

解決策3:ソケットの実装を変更する

特定のソケット実装にバグまたはグリッチがある場合、このエラーがトリガーされる可能性があるため、アプリケーションの特定の要素が正しく機能しなくなる可能性があります。したがって、このステップでは、別の実装を使用するように構成します。そのため:

  1. StateObjec t」クラスがあり、「public byte [] buffer = new byte [1024]、public Socket socket;であることを確認してください
  2. Receive(Socket s)」関数を呼び出し、「void ReceiveCallback(IAsyncResult ar)」で次のコードを呼び出します
     SocketError errorCode ; int nBytesRec = socket . EndReceive ( ar , out errorCode ); if ( errorCode != SocketError . Success ) { nBytesRec = 0 ; } 
  3. このコードを実装した後も問題が解決するかどうかを確認してください。

解決策4:コマンドラインを追加する(Entity Frameworkのみ)

Entity Frameworkを使用している場合、特定のコード行が欠落している可能性があります。したがって、このステップでは、この問題を修正するためにそのコード行を追加します。そのため:

  1. あなたの「開く.edmx」ファイルをし、「開く.context.ttその下の」ファイルを。
  2. .context.cs」ファイルを開き、次のコード行をコンストラクタに追加します
     public DBEntities () : base ( "name=DBEntities" ) { this . Configuration . ProxyCreationEnabled = false ; // ADD THIS LINE ! } 
  3. このコード行を追加した後も問題が解決するかどうかを確認してください。

解決策5:.NET Frameworkを更新する

すべてがスムーズに機能するためには、「。NET」フレームワークの最新バージョンが必要です。したがって、このステップでは、サイトから最新バージョンをダウンロードしてインストールします。そのため:

  1. このリンクに移動して、セットアップをダウンロードします。
  2. .exe」ファイルを実行して、インストールプロセスを開始します。
  3. 画面の指示に従って、アプリケーションをコンピューターにインストールします。
  4. インストールの完了後も問題が解決するかどうかを確認してください。