Как исправить ошибку «Существующее соединение было принудительно закрыто удаленным хостом»?

Удаленный компьютер - это тот, который не имеет физического присутствия; к нему можно получить доступ только через какую-то компьютерную сеть. Удаленный хост - это компьютер, на котором размещена сеть, на которой размещен удаленный компьютер, а удаленный клиент является пользователем удаленного клиента в сети. Эта функция произвела революцию во многих процессах и имеет большие возможности в будущем.

Существующее соединение было принудительно закрыто из-за ошибки локального хоста

Однако совсем недавно поступало много сообщений об ошибке « существующее соединение было принудительно закрыто удаленным хостом » при попытке подключения к удаленному хосту. Эта ошибка вызывается соединением сокета между клиентом и сервером. В этой статье мы предоставим некоторые жизнеспособные решения для полного исправления этой ошибки, а также проинформируем вас о причинах, которые вызывают эту ошибку.

Что вызывает ошибку «Существующее соединение было принудительно закрыто удаленным хостом» в 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. Нажмите « ОК », чтобы сохранить изменения и проверить, сохраняется ли проблема.

Решение 2. Принудительное использование TLS 1.2

Если приложение было настроено на использование TLS 1.1 или TLS 1.0 вместо TLS 1.2, оно может вызвать эту ошибку. Поэтому на этом этапе мы будем настраивать наш компьютер для использования TLS 1.2. Для этого:

  1. Перейдите в корень сайта и щелкните правой кнопкой мыши файл «global.asax» .
  2. Выберите « Просмотреть код » из списка.
  3. Должен быть метод Application_Start, добавьте следующую строку кода к этому методу
     if (ServicePointManager. SecurityProtocol. HasFlag (SecurityProtocolType. Tls12) == false) ServicePointManager. SecurityProtocol = ServicePointManager. SecurityProtocol 

    Добавление строк в код
  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 Framework необходима для того, чтобы все функционировало без сбоев. Поэтому на этом этапе мы будем загружать последнюю версию с сайта и устанавливать ее. Для этого:

  1. Перейдите по этой ссылке, чтобы загрузить настройки.
  2. Выполните файл « .exe », чтобы начать процесс установки.

    Запуск исполняемого файла, загруженного из Microsoft
  3. Следуйте инструкциям на экране, чтобы установить приложение на свой компьютер.
  4. Проверьте, сохраняется ли проблема после завершения установки.

Интересные статьи