Jak naprawić & lsquo; istniejące połączenie zostało przymusowo zamknięte przez zdalnego hosta & rsquo; Błąd?

Komputer zdalny to taki, który nie jest fizycznie obecny; można uzyskać do niego dostęp tylko przez jakąś sieć komputerową. Host zdalny to komputer obsługujący sieć, na którym znajduje się komputer zdalny, a klient zdalny to użytkownik klienta zdalnego w sieci. Ta funkcja zrewolucjonizowała wiele procesów i ma również duży zakres w przyszłości.

Jednak całkiem niedawno pojawiło się wiele raportów o błędzie „ istniejące połączenie zostało przymusowo zamknięte przez hosta zdalnego ” podczas próby połączenia się z hostem zdalnym. Ten błąd jest wyzwalany w przypadku połączenia przez gniazdo między klientem a serwerem. W tym artykule przedstawimy kilka wykonalnych rozwiązań, które całkowicie naprawią ten błąd, a także poinformujemy o przyczynach, które powodują ten błąd.

Co powoduje błąd „Istniejące połączenie zostało przymusowo zamknięte przez hosta zdalnego” w systemie Windows?

Po otrzymaniu wielu zgłoszeń od wielu użytkowników postanowiliśmy zbadać problem i opracować zestaw rozwiązań, które go naprawią. Przyjrzeliśmy się również powodom, dla których jest uruchamiany, i wymieniliśmy je poniżej.

  • Użycie protokołu TLS 1.1 / 1.0: Jeśli aplikacja działa w protokole TLS 1.1 lub TLS 1.0, może wywołać ten błąd z powodu ich przestarzałości. TLS 1.2 to droga do wyboru protokołu, z którego korzysta aplikacja.
  • Kryptografia wyłączona: Jeśli kryptografia została wyłączona dla twojego komputera, uniemożliwi to korzystanie z TLS 1.2 i powróci do TLS 1.0, co może wywołać błąd.
  • Implementacja gniazda: w niektórych przypadkach określony typ implementacji gniazda wyzwala błąd. W niektórych implementacjach aplikacji „.NET” występuje błąd, który może powodować ten błąd.
  • Brakujący kod: W przypadku niektórych osób, które korzystały z Entity Framework, zaobserwowano, że brakuje określonego wiersza kodu, z powodu którego został wyzwolony błąd.
  • Przestarzałe środowisko „.NET”: w niektórych przypadkach, jeśli środowisko „.NET” zostało wyłączone, może zostać wyzwolony ten błąd. Niektóre zadania wymagają aktualizacji frameworka „.NET” do najnowszej wersji, aby działały prawidłowo.

Teraz, gdy masz już podstawową wiedzę na temat natury problemu, przejdziemy do rozwiązań. Upewnij się, że wdrażasz je w określonej kolejności, w której są przedstawione, aby uniknąć konfliktów.

Rozwiązanie 1: Włączanie kryptografii

Jeśli kryptografia została wyłączona dla twojego komputera, użycie TLS 1.2 jest zabronione. Dlatego na tym etapie włączymy kryptografię. Za to:

  1. Naciśnij „ Windows ” + „ R ”, aby otworzyć okno Uruchom.
  2. Wpisz „regedit” i naciśnij „ Enter ”.
  3. Przejdź pod następujący adres
    HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031

    Przejdź do tego adresu, jeśli w prawym okienku nie ma wartości „ SchUseStrongCrypto ”.

    HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319
  4. W prawym okienku kliknij dwukrotnie opcję „ SchUseStrongCrypto ” i wprowadź „ 1 ” jako dane wartości.
  5. Kliknij „ OK ”, aby zapisać zmiany i sprawdzić, czy problem nadal występuje.

Rozwiązanie 2: Wymuszanie użycia TLS 1.2

Jeśli aplikacja została skonfigurowana do używania protokołu TLS 1,1 lub TLS 1,0 zamiast protokołu TLS 1,2, może to spowodować ten błąd. Dlatego w tym kroku będziemy konfigurować nasz komputer do korzystania z TLS 1.2. Za to:

  1. Przejdź do katalogu głównego witryny i kliknij prawym przyciskiem myszy plik „global.asax” .
  2. Wybierz „ Wyświetl kod ” z listy.
  3. Powinna istnieć metoda „ Application_Start ”, dodaj następujący wiersz kodu do tej metody
    if (ServicePointManager. SecurityProtocol. HasFlag (SecurityProtocolType. Tls12) == false) SecurityProtocolType. Tls12;              
  4. Zapisz zmiany i sprawdź, czy problem nadal występuje.

Rozwiązanie 3: Zmiana implementacji gniazda

Jeśli dana implementacja gniazda ma błąd lub usterkę, może to uniemożliwić prawidłowe działanie niektórych elementów aplikacji, przez co może zostać wywołany ten błąd. Dlatego w tym kroku skonfigurujemy go tak, aby używał innej implementacji. Za to:

  1. Upewnij się, że masz klasęStateObjec t” z „ publicznym bajtem [] bufor = nowy bajt [1024], publiczne gniazdo Socket; „.
  2. Wywołaj funkcję „ Receive (Socket s) ” i wywołaj następujący kod w „ void ReceiveCallback (IAsyncResult ar)
     SocketError errorCode ; int nBytesRec = socket . EndReceive ( ar , out errorCode ); if ( errorCode != SocketError . Success ) { nBytesRec = 0 ; } 
  3. Sprawdź, czy problem nadal występuje po zaimplementowaniu tego kodu.

Rozwiązanie 4: Dodawanie wierszy poleceń (tylko dla Entity Framework)

Jeśli korzystasz z Entity Framework, możliwe, że może brakować określonego wiersza kodu. Dlatego w tym kroku dodamy tę linię kodu, aby rozwiązać ten problem. Za to:

  1. Otwórz swój plik „ .edmx ” i otwórz znajdujący się pod nim plik „ .context.tt ”.
  2. Otwórz plik „ .context.cs ” i dodaj następujący wiersz kodu do konstruktora
     public DBEntities () : base ( "name=DBEntities" ) { this . Configuration . ProxyCreationEnabled = false ; // ADD THIS LINE ! } 
  3. Sprawdź, czy problem nadal występuje po dodaniu tego wiersza kodu.

Rozwiązanie 5: Aktualizacja .NET Framework

Aby wszystko działało sprawnie, wymagana jest najnowsza wersja środowiska „.NET” Framework. Dlatego w tym kroku pobierzemy najnowszą wersję ze strony i zainstalujemy ją. Za to:

  1. Przejdź do tego łącza, aby pobrać konfigurację.
  2. Uruchom plik „ .exe ”, aby rozpocząć proces instalacji.
  3. Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby zainstalować aplikację na komputerze.
  4. Sprawdź, czy problem nadal występuje po zakończeniu instalacji.