Używamy WebClient, .NET 3.5sp1 w aplikacji WinForm. W przypadku niektórych użytkowników wynik jest następujący: w wyjątku z komunikatem:Reprodukuj "Połączenie, które miało pozostać przy życiu, zostało zamknięte przez serwer."
"Połączenie podstawowe zostało zamknięte: połączenie, które miało pozostać przy życiu, zostało zamknięte przez serwer."
Searching nieco całym Internecie sugeruje „naprawić” po prostu wyłączyć http podtrzymywanie, które tak naprawdę nie są zainteresowani w tym, niektórzy sugerują, że może to być błąd w bibliotekach .NET itp
Komunikat o błędzie sugeruje, że jest to utrzymywane połączenie HTTP, które w jakiś sposób zostało zamknięte przez serwer (lub serwer proxy) bez odpowiednich mechanizmów wykrywania przez WebClient.
Myślimy o tym konkretnym przypadku i po prostu spróbuj ponownie. Jednak nie możemy odtworzyć tego wyjątku. Więc.
Jak możemy poprawnie złapać skrzynię, która daje powyższy komunikat o błędzie.
catch (WebException ex) { if (ex.Message == "Połączenie podstawowe zostało zamknięte: połączenie, które spodziewano się być utrzymywane przy życiu zostało zamknięte przez serwer") {...}
brzydko pachnie.
Jakieś wskazówki, jak możemy odtworzyć powyższy wyjątek?
'Dla niektórych users' sugeruje, że to nie wszyscy. Czy ci użytkownicy są za proxy (albo jawnie ustawione, albo przezroczyste proxy)? Zajęty serwer proxy w środowisku korporacyjnym może niespodziewanie zrzucić połączenia, stąd wyjątek. Tak czy inaczej, jest to problem sieciowy (klient, host lub bity pośredniczące), a nie błąd w .NET Framework. –
Prawdopodobnie masz rację, że jest to problem z siecią. Dlatego chcemy spróbować po prostu ponowić żądanie, jeśli jest to konkretna, choć wiemy tylko, że ten tekst wywodzi się z wyjątku WebException - czy istnieje niezawodny sposób na wykrycie tego specyficznego wyjątku, jakiegoś określonego kodu błędu lub czego nie? I chcemy go odtworzyć, abyśmy mogli przetestować, że ponowienie żądania nie powoduje innej zła, gdy "połączenie zostało zamknięte". – Habalusa
Otrzymuję ten sam błąd, gdy próbuję wysłać duże dane z warstwy usługi. Jakąkolwiek wskazówkę, dlaczego tak się dzieje? –