Как исправить & lsquo; Существующее соединение было принудительно закрыто удаленным хостом & rsquo; Ошибка?

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

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

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

Теперь, когда у вас есть базовое представление о природе проблемы, мы перейдем к ее решениям. Обязательно реализуйте их в определенном порядке, в котором они представлены, чтобы избежать конфликтов.

Решение 1. Включение криптографии

Если на вашем компьютере отключена криптография, использование TLS 1.2 запрещено. Поэтому на этом этапе мы включим криптографию. Для этого:

  1. Нажмите « Windows » + « R », чтобы открыть окно « Выполнить».
  2. Введите «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 » в качестве данных значения.
  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) 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» Framework требуется для того, чтобы все работало бесперебойно. Поэтому на этом этапе мы загрузим последнюю версию с сайта и установим ее. Для этого:

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