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

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

ローカルホストエラーによって既存の接続が強制的に閉じられました

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

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」入力し 、「 Enter 」を押します。

    「Regedit」と入力して「Enter」を押す
  3. 次のアドレスに移動します
     HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031 

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

     HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319 
  4. 右側のペインで、「 SchUseStrongCrypto 」オプションをダブルクリックし、値データとして「 1 」を入力します。

    右ペインの「SchUseStrongCrypto」値をダブルクリックします
  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)ServicePointManager。 SecurityProtocol = ServicePointManager。 セキュリティプロトコル 

    コードに行を追加する
  4. 変更を保存し 、問題が続くかどうかを確認します。

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

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

  1. public byte [] buffer = new byte [1024]、public Socket socket; 」の「 StateObjec t」クラスがあることを確認してください 「。
  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 」ファイルを実行して、インストールプロセスを開始します。

    Microsoftからダウンロードした実行可能ファイルを実行する
  3. 画面上の指示に従って 、コンピューターにアプリケーションをインストールします。
  4. インストールの完了後も問題が解決しないか確認してください。

興味深い記事