Как да коригирам & 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 “ като Data value.
  5. Щракнете върху „ OK “, за да запазите промените си и проверете дали проблемът продължава.

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

Ако приложението е конфигурирано да използва TLS 1.1 или TLS 1.0 вместо TLS 1.2, може да предизвика тази грешка. Следователно в тази стъпка ще конфигурираме нашия компютър да използва TLS 1.2. За това:

  1. Придвижете се до корена на сайта и щракнете с десния бутон върху файла „global.asax“ .
  2. Изберете „ Преглед на кода “ от списъка.
  3. Трябва да има метод “ Application_Start ”, добавете следния ред код към този метод
    ако (ServicePointManager. SecurityProtocol. HasFlag (SecurityProtocolType. Tls12) == false) SecurityProtocolType. Tls12;              
  4. Запазете промените си и проверете дали проблемът продължава.

Решение 3: Промяна на внедряването на сокет

Ако в определена реализация на сокет има грешка или бъг, това може да попречи на някои елементи на приложението да функционират правилно, поради което тази грешка може да се задейства. Следователно в тази стъпка ще го конфигурираме да използва различно изпълнение. За това:

  1. Уверете се, че имате клас “ StateObjec t” с “ публичен байт [] буфер = нов байт [1024], публичен сокет сокет; “.
  2. Извикайте функцията „ Receive (Socket s) “ и извикайте следния код в „ void ReceiveCallback (ar IAsyncResult)
     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. Проверете дали проблемът продължава, след като завършите инсталацията.