Ошибка «Удаленный хост принудительно разорвал существующее подключение» возникает при попытке установить соединение с сервером.
Возможно, сервер при отправке ответного запроса на подтверждение подключения, не может получить обратного отклика от клиента в отведенном промежутке времени и разрывает соединение. Есть несколько решений для устранения этой ошибки, узнаем их подробнее.
Чем вызвана ошибка?
Подключение может быть принудительно разорвано удаленным хостом по следующим причинам.
- Приложение использует протоколы защиты транспортного уровня TLS 1.1/1.0, которые вызывают эту ошибку при подключении.
- Отключена поддержка криптографии, что делает невозможным использование протокола TLS 1.2. В итоге задействуется только TLS 1.0, из-за которого возникает проблемы.
- Используется платформа Entity Framework, в которой отсутствует определенная строка кода.
- Платформа «.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». Для этого загрузите и установите последнюю версию с сайта Майкрософт.
Проверьте, решена ли проблема после завершения установки.
Инженер-программист
Я открываю regedit и у меня правда нет этого 1 кода, но по инструкции должна быть вкладка 4.0.30319, а у меня ее нет.