Как исправить ошибку: Удаленный хост принудительно разорвал существующее подключение

Ошибка «Удаленный хост принудительно разорвал существующее подключение» возникает при попытке установить соединение с сервером.

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

Чем вызвана ошибка?

Подключение может быть принудительно разорвано удаленным хостом по следующим причинам.

  1. Приложение использует протоколы защиты транспортного уровня TLS 1.1/1.0, которые вызывают эту ошибку при подключении.
  2. Отключена поддержка криптографии, что делает невозможным использование протокола TLS 1.2. В итоге задействуется только TLS 1.0, из-за которого возникает проблемы.
  3. Используется платформа Entity Framework, в которой отсутствует определенная строка кода.
  4. Платформа «.NET» устарела или отключена. Проблема решается обновлением платформы до последней версии.

Включение поддержки протоколов криптографии

Клиент-серверные приложения не смогут использовать протокол TLS 1.2, если в ОС отключена поддержка криптографии. Для ее включения выполните следующие шаги:

Откройте Редактор реестра командой regedit, запущенной из окна «Выполнить» (Win + R).

Перейдите к разделу:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319

В правой части окна должен быть параметр SchUseStrongCrypto. Если отсутствует, щелкните правой кнопкой мыши на разделе «v4.0.30319» и выберите Создать – Параметр DWORD (32 бита). Присвойте ему указанное имя.

Двойным щелчком откройте свойства параметра SchUseStrongCrypto и в поле значение установите «1». Сохраните изменения на ОК и выйдите из редактора реестра.

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

Принудительное включение протокола TLS 1.2

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

Перейдите в корневой каталог web приложения и щелкните правой кнопкой мыши на файл «Global.asax». Выберите «Просмотр кода» из списка.

На странице найдите метод «Application_Start». Добавьте к этому методу следующую строку кода:

if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false)
{
ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol SecurityProtocolType.Tls12;
}

Сохраните изменения и проверьте, разрывается ли соединение с удаленным хостом.

Изменение реализации объекта Socket

Если определенная реализация объекта Socket имеет ошибку, это может помешать элементам приложения функционировать должным образом. Поэтому попробуйте его перенастроить:

Проверьте, что есть класс 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;
}

Проверьте, сохраняется ли проблема с подключением к удаленному хосту после реализации этого кода.

Добавление кода (только для Entity Framework)

При использовании Entity Framework, ошибка может возникнуть из-за отсутствующей строки кода. Для ее добавления выполните следующие шаги:

Откройте свой файл «.edmx», под ним щелкните на «.context.tt». В файле «.context.cs» добавьте следующую строку:

public DBEntities()
:base(«name=DBEntities»)
{
this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE !
}

Обновление NET Framework

Подключение может быть разорвано удаленным хостом из-за повреждения некоторых компонентов платформы «.NET Framework». Для этого загрузите и установите последнюю версию с сайта Майкрософт.

Проверьте, решена ли проблема после завершения установки.

Ссылка на основную публикацию