Что может быть причиной исключения «Клиент отключен» ASP.NET? - PullRequest
30 голосов
/ 01 мая 2009

Мое приложение .NET 3.5 время от времени вызывает следующее исключение System.Web:

Клиент отключен

Почему происходит это исключение? Мое приложение работает на сервере IIS 6.0 с балансировкой нагрузки Windows Server 2003.

Ответы [ 6 ]

31 голосов
/ 11 июня 2009

Кажется, что домен vbdork.net больше не существует. В поисках этой ошибки я нашел несколько ссылок на эту статью. Итак, я нашел ее в кэшированной версии Google и сейчас публикую здесь для справки. Исходный URL был: http://vbdork.net/post/2009/02/10/The-client-disconnected.aspx

Вы получаете сообщение Клиент отключен.

Вы, скорее всего, время от времени получаете это сообщение об ошибке, если вы находитесь в веб-ферме и у вас есть страница, где пользователь может сделать несколько выборок, как правило, это происходит в этом сценарии:

Пользователь выбирает раскрывающийся список, в котором есть событие при обратной передаче, но пользователь делает это снова, прежде чем запрос будет отправлен обратно пользователю, теперь пользователь создает второе событие, которое запускается на другом веб-сервере. предыдущий веб-сервер пытается вернуть результаты старого события пользователю, но его больше нет, потому что пользователь теперь находится на другом веб-сервере.

Пользователь никогда не увидит ошибки, но если вы поймаете ошибки и отправите их по электронной почте / войдете в журнал, вы увидите их, как показано ниже, и будете полностью разочарованы. Не беспокойтесь об этом, просто не обращайте на это внимания, это даже не проблема, если вы улавливаете ошибки такого рода, ничто не пойдет не так.

Type : System.Web.HttpException, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Message : The client disconnected.
Source : System.Web
Help link :
ErrorCode : -2147467259
Data : System.Collections.ListDictionaryInternal
TargetSite : Void ThrowError(System.Exception, System.String, System.String, Boolean)
Stack Trace :    at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError)
           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)
           at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
           at System.Web.UI.Page.ProcessRequest()
           at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
           at System.Web.UI.Page.ProcessRequest(HttpContext context)
           at ASP.src_rptprefs_chainhierarchy_aspx.ProcessRequest(HttpContext context)
           at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
           at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

        Inner Exception
        ---------------
        Type : System.Web.UI.ViewStateException, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        Message : Invalid viewstate.

Client IP: 10.21.4.8
Port: 46784
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; MS-RTC LM 8)
7 голосов
/ 01 мая 2009

Возможно, потому что "клиент отключен" ...

Закрытый браузер, переход на новую страницу, надоело ждать загрузки приложения ...

На полном серьезе, проверьте на этой странице для большого количества информации по этой проблеме.

Таким образом, это происходит потому, что браузер инициирует новый запрос, который перенаправляется на второй сервер, пока первый сервер обрабатывает исходный запрос. Его совет - просто игнорировать это.

Мой совет - выяснить, почему ваш балансировщик нагрузки не поддерживает привязку клиента к тому же серверу при последующих запросах; также называется «липкими» сессиями.

4 голосов
/ 11 октября 2013

Если вы используете компоненты Telerik, избавьтесь от модуля RadCompression.

2 голосов
/ 13 декабря 2013

Также проверьте этот ответ на аналогичный вопрос. В этом случае нет веб-фермы.

Это исключение выдается, когда ViewState становится "большим", и пользователь нажимает кнопку до того, как предыдущий запрос будет завершен. [...] Это происходит очень легко, потому что в посте используется ajax, поэтому браузер не перестает отвечать, пока на сервер отправляется ViewState.

Кредит Расселу Кларво

0 голосов
/ 15 мая 2013

Другие вероятные причины: Вы используете элементы управления, которые не поддерживают Ajax в реальности. Предполагается, что Ajax способен обрабатывать асинхронные запросы, но некоторые элементы управления не работают, например, просмотр дерева telerik (ajax). (Ожидая, что интернет-полиция Telerik, как обычно, подвергнет цензуре эту плохую рекламу.)

0 голосов
/ 20 июля 2012

попытка исправить путем разбиения состояния представления на несколько полей с помощью maxPageStateFieldLength в web.config:

<pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="false" maxPageStateFieldLength="20">
...