【解決済み】「既存の接続がリモート ホストによって強制的に切断されました」エラーの直し方
「既存の接続がリモート ホストによって強制的に切断されました」エラーとは
リモートコンピューターとは、物理的な実体を持たず、何らかのコンピューターネットワークを通じてのみアクセスできるコンピューターのことです。リモートホストはそのネットワークをホストするコンピューターであり、リモートクライアントはネットワーク上でリモート機能を利用するユーザーを指します。この仕組みは数多くの業務プロセスに革命をもたらしており、今後もさらなる発展が期待される重要な技術です。

しかし近年、「既存の接続がリモート ホストによって強制的に切断されました(An existing connection was forcibly closed by the remote host)」というエラーが発生するという報告が多数寄せられています。このエラーは、クライアントとサーバー間のソケット接続において発生します。本記事では、このエラーを完全に解消するための有効な解決策と、エラーを引き起こす原因について詳しく解説します。
Windowsでこのエラーが発生する主な原因
複数のユーザーから寄せられた報告をもとに調査を行い、問題を解決するための一連の対策をまとめました。あわせて、エラーが発生する主な原因も以下に整理しています。
- TLS 1.1/1.0 の使用: アプリケーションがTLS 1.1またはTLS 1.0で動作している場合、これらのプロトコルはすでに非推奨となっているため、このエラーが発生することがあります。使用するプロトコルはTLS 1.2を選択しましょう。
- 暗号化(Cryptography)が無効: マシンで暗号化機能が無効になっていると、TLS 1.2の使用が妨げられ、TLS 1.0へフォールバックしてしまうため、エラーが発生する可能性があります。
- ソケットの実装方法: 特定の種類のソケット実装がエラーを引き起こすケースがあります。「.NET」の一部の実装にはバグがあり、このエラーの原因となることがあります。
- コードの欠落: Entity Frameworkを使用している一部の環境では、特定のコード行が欠落していたためにエラーが発生していることが確認されました。
- 「.NET」Frameworkが古い: 場合によっては、「.NET」Frameworkが古い、または無効になっていることが原因でエラーが発生します。一部のタスクを正常に動作させるには、最新版への更新が必要です。
問題の概要をご理解いただけたところで、解決策に進みましょう。競合や不具合を避けるため、必ず記載された順番どおりに実施してください。
解決策1:暗号化(Cryptography)を有効にする
マシンで暗号化が無効になっていると、TLS 1.2の使用が禁止されます。そこで、この手順では暗号化を有効にします。以下の手順に従ってください。
- 「Windows」キー +「R」キーを押して「ファイル名を指定して実行」を開きます。
- 「regedit」と入力し、「Enter」キーを押します。

- レジストリエディターで、次のアドレスへ移動します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
右ペインに「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」ファイルを右クリックします。
- 一覧から「コードの表示(View Code)」を選択します。
- 「Application_Start」メソッドを見つけ、そのメソッド内に以下のコード行を追加します。
if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false) { ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12; }
- 変更を保存し、問題が解決したかどうかを確認します。
解決策3:ソケットの実装を変更する
特定のソケット実装にバグや不具合があると、アプリケーションの一部が正常に動作せず、このエラーが発生することがあります。そこで、この手順では別の実装を使用するように構成を変更します。
- 「StateObject」クラスに「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; // この行を追加! } - このコード行を追加した後、問題が解決したかどうかを確認します。
解決策5:.NET Frameworkを更新する
すべての機能をスムーズに動作させるには、最新版の「.NET」Frameworkが必要です。そこで、この手順では公式サイトから最新版をダウンロードしてインストールします。
- こちらのリンクからセットアップファイルをダウンロードします。
- 「.exe」ファイルを実行してインストールプロセスを開始します。

- 画面の指示に従って、アプリケーションをコンピューターにインストールします。
- インストール完了後、問題が解決したかどうかを確認します。
-
「リモートデバイスまたはリソースが接続を受け入れません」エラーの原因と解決方法
PCからインターネットに接続できず、「接続が制限されています」と表示されることはありませんか?原因はさまざまですが、まず試すのがネットワーク診断ツールです。このとき「リモートデバイスまたはリソースが接続を受け入れません(The remote device or resource wont accept the connection)」というエラーメッセージが表示されることがあります。 このエラーが発生する原因 このエラーは、主にネットワーク設定の誤りや、PC上のネットワーク構成が何らかの理由で変更された場合に発生します。例えば、ブラウザの設定でプロキシサーバーが有効になっている、あるいは誤っ
-
Windows 10で「リモート プロシージャ呼び出しに失敗しました」エラーを解決する方法
Windows 10では、さまざまなシステムエラーや不具合が発生することがありますが、その多くは適切な対処法によって解決できます。Windows 10で「リモート プロシージャ呼び出しに失敗しました(The remote procedure call failed)」というエラーに悩んでいる方もご安心ください。この記事では、この問題の原因と具体的な解決方法をわかりやすく解説します。リモート プロシージャ コール(RPC)とは?RPC(Remote Procedure Call:リモート プロシージャ コール)とは、異なるコンピュータ上で動作するプログラム同士が、互いの手続き(サブルーチン)を呼