Istniejące połączenie zostało wymuszone przez zdalnego hosta

Istniejące połączenie zostało wymuszone przez zdalnego hosta

Ogólnie oznacza to, że strona zdalna zamknęła połączenie (zwykle wysyłając TCP/IP RST paczka). Jeśli pracujesz z aplikacją innej firmy, prawdopodobne przyczyny to:

  • Wysyłasz zniekształcone dane do aplikacji (co może obejmować wysyłanie żądania HTTPS do serwera HTTP)
  • Łącze sieciowe między klientem a serwerem z jakiegoś powodu nie działa
  • Wywołałeś błąd w aplikacji innej firmy, który spowodował jej awarię
  • Aplikacja innej firmy wyczerpała zasoby systemowe

Prawdopodobnie pierwszy przypadek to właśnie to, co się dzieje.

Możesz uruchomić Wireshark, aby zobaczyć dokładnie, co dzieje się na przewodzie, aby zawęzić problem.

Bez bardziej szczegółowych informacji jest mało prawdopodobne, że ktokolwiek tutaj może naprawdę Ci pomóc.


Użycie TLS 1.2 rozwiązało ten błąd.
Możesz zmusić swoją aplikację przy użyciu TLS 1.2 za pomocą tego (upewnij się, że wykonałeś go przed wywołaniem usługi):

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 

Inne rozwiązanie:
Włącz silną kryptografię na swoim lokalnym komputerze lub serwerze, aby korzystać z TLS1.2, ponieważ domyślnie jest on wyłączony, więc używany jest tylko TLS1.0.
Aby włączyć silną kryptografię, wykonaj następujące polecenie w PowerShell z uprawnieniami administratora:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord 

Aby zmiany zaczęły obowiązywać, musisz ponownie uruchomić komputer.


To nie jest błąd w twoim kodzie. Pochodzi z implementacji Socket .Net. Jeśli użyjesz przeciążonej implementacji EndReceive, jak poniżej, nie otrzymasz tego wyjątku.

    SocketError errorCode;
    int nBytesRec = socket.EndReceive(ar, out errorCode);
    if (errorCode != SocketError.Success)
    {
        nBytesRec = 0;
    }