2009-06-10 10 views
13

Często otrzymuję komunikat Odłączony klient. Nie używam równoważenia obciążenia - tylko jeden serwer IIS. Muszę wiedzieć, co jest przyczyną tego i jak to naprawić.Klient rozłączony

Oto informacji wyjątek:

Type: System.Web.HttpException 
Message: The client disconnected. 

Exception Data: 

Source: System.Web 

TargetSite: Void ThrowError(System.Exception, System.String, System.String, Boolean) 

StackTrace: 
    at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) 
    at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) 
    at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) 
    at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) 
    at System.Web.UI.HiddenFieldPageStatePersister.Load() 
    at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() 
    at System.Web.UI.Page.LoadAllState() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
+0

FWIW, wygląda jak nie ma już podobne pytanie: http://stackoverflow.com/questions/809413/what-might-be-causes-the-client-disconnected-asp-net-exception –

+1

@ ChrisW.Rea Tak, ale ten określa pojedynczy serwer IIS, a drugi konkretnie wspomina o równoważeniu obciążenia. Odpowiedź, której szukałem, dotyczy tego pytania, a nie drugiego. – Michael

Odpowiedz

1

Jest możliwe, że użytkownicy są przerywania stronie wyświetlanej po plecach, klikając przycisk STOP lub załadować w przeglądarce. Czy twoja aplikacja ma kilka stron, które są dość ciężkie, np. wiele stanów wyświetlania i czy masz użytkowników, którzy korzystają z wolniejszych połączeń, np. Wykręcić numer?

+0

To nie jest to, co się dzieje. Wszystkie połączenia lokalne wynoszą 100 MB/1 GB i dzieje się to na wielu różnych stronach. Używamy wielu stanów widoku i nie ma na to skutecznego sposobu. Problem zdaje się występować niemal losowo. –

+0

Jaki jest przypadek użycia, którego faktycznie potrzebujesz, aby zatrzymać ten błąd? –

8

Dostajemy również ten wyjątek i otrzymujemy go w całkowicie powtarzalny sposób. Ten wyjątek jest generowany, gdy ViewState stał się "duży", a użytkownik kliknie przycisk przed zakończeniem poprzedniego żądania ...

W naszym przypadku dzieje się to bardzo łatwo, ponieważ odsyłający używa ajaxu, więc przeglądarka robi przestaje odpowiadać, gdy ViewState jest wysyłane na serwer. Kliknięcie tej kontrolki powoduje wielokrotny wyjątek.

+0

To wyjaśnia, dlaczego tak się dzieje. Tak, aby rozwiązać ten typ problemów, jeśli wymagania klienta są takie, jak powiedziałeś. Czy możemy zignorować ten problem? – Ajay

+0

Istnieje kilka sposobów na zmniejszenie wpływu ViewState. Jednym ze sposobów jest utworzenie własnego dostawcy stanu widoku i wstrzymanie wysyłania go przez sieć. Innym jest wyłączenie go i wykonanie pracy, aby strona działała bez niego. Najbardziej drastyczny sposób, a droga, którą zmierzamy, polega na przeniesieniu twoich stron do MVC. –

2

Dzieje się tak również wtedy, gdy twoja strona pozwala użytkownikowi końcowemu na częściowe ogłaszanie częściowe bez czekania na odpowiedź. Znaczenie: Załóżmy tabelę, w której kliknięcie w wiersz powoduje częściowy odświeżenie i pokazuje szczegóły tego wiersza. Teraz, jeśli użytkownik w jednym wierszu i nie czeka na szczegóły, klika inny wiersz ... istnieje szansa, że ​​wystąpi ten wyjątek.

Aplikacja ASP.NET AJAX porzuca nowe żądanie async po uruchomieniu.

Jednak Pozostaje niezrozumiałych to dlaczego IIS umożliwiają takie opuszczone prośba dotrzeć ASP.NET w ogóle ..