Как да коригирате „Съществуваща връзка е принудително затворена от грешката на отдалечения хост?
Отдалечен компютър е този, който няма физическо присъствие; достъпът до него е само чрез някаква компютърна мрежа. Дистанционният хост е компютърът, домакин на мрежата, който хоства отдалечения компютър, а отдалеченият клиент е потребителят на отдалечения клиент в мрежата. Тази функция революционизира много процеси и има голям обхват и в бъдеще.
Въпреки това, съвсем наскоро се появиха много отчети за грешка „ съществуваща връзка, която беше насилствено затворена от отдалечения хост “, докато се опитваше да се свърже с отдалечения хост. Тази грешка се задейства със сокетна връзка между клиент и сървър. В тази статия ще предоставим някои жизнеспособни решения за пълното отстраняване на тази грешка, както и да ви информираме за причините, които предизвикват тази грешка.
Какво причинява „Съществуваща връзка беше насилствено затворена от грешката на отдалечения хост“ в 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 е забранено. Следователно в тази стъпка ще дадем възможност за криптография. За това:
- Натиснете “ Windows ” + “ R ”, за да отворите подканата Run.
- Въведете „regedit“ и натиснете „ Enter “.
Въведете „Regedit“ и натиснете „Enter“ - Навигирайте до следния адрес
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031
Придвижете се до този адрес, ако няма стойност „ SchUseStrongCrypto “ в десния прозорец.
HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319
- В десния прозорец щракнете двукратно върху опцията „ SchUseStrongCrypto “ и въведете „ 1 “ като стойност на данните.
Кликнете два пъти върху стойността „SchUseStrongCrypto“ в десния прозорец - Кликнете върху „ OK “, за да запазите промените си, и проверете дали проблемът продължава.
Решение 2: Принуждаване на TLS 1.2 Употреба
Ако приложението е конфигурирано да използва TLS 1.1 или TLS 1.0 вместо TLS 1.2, това може да предизвика тази грешка. Следователно в тази стъпка ще конфигурираме компютъра си да използва TLS 1.2. За това:
- Отворете корена на сайта и кликнете с десния бутон върху файла „global.asax“ .
- Изберете „ Преглед на кода “ от списъка.
- Трябва да има метод „ Application_Start “, добавете следния ред код към този метод
ако (ServicePointManager. SecurityProtocol. HasFlag (SecurityProtocolType. Tls12) == false) ServicePointManager. SecurityProtocol = ServicePointManager. SecurityProtocol
Добавяне на редовете към кода - Запазете промените си и проверете дали проблемът продължава.
Решение 3: Промяна на реализацията на сокета
Ако определена реализация на сокет има грешка или бъг в него, това може да попречи на някои елементи на приложението да функционират правилно, поради което тази грешка може да се задейства. Следователно в тази стъпка ще го конфигурираме, за да използва различна реализация. За това:
- Уверете се, че имате клас „ StateObjec t“ с „ публичен байт [] буфер = нов байт [1024], обществен сокет сокет; ".
- Обадете се на функцията „ Получаване (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 ; // ADD THIS LINE ! }
- Проверете дали проблемът продължава, след като добавите този ред код.
Решение 5: Актуализиране на .NET Framework
Най-новата версия на .NET Framework е необходима, за да може всичко да работи безпроблемно. Следователно в тази стъпка ще изтеглим най-новата версия от сайта и ще я инсталираме. За това:
- Отворете тази връзка, за да изтеглите настройката.
- Изпълнете файла „ .exe “, за да стартирате процеса на инсталиране.
Изпълнение на изпълним файл, изтеглен от Microsoft - Следвайте екранните инструкции, за да инсталирате приложението на вашия компютър.
- Проверете дали проблемът продължава след завършване на инсталацията.