Подтвердить что ты не робот

Что может быть причиной исключения клиента "отключено" ASP.NET?

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

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

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

4b9b3361

Ответ 1

Теперь домен 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)

Ответ 2

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

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

Всю серьезность, посмотрите эту страницу для получения большой информации об этой проблеме.

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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