私の.NET3.5アプリケーションは、散発的に次の例外System.Web例外をスローします。
クライアントが切断されました
この例外が発生するのはなぜですか?私のアプリケーションは、負荷分散されたWindows Server 2003IIS6.0サーバーで実行されています。
私の.NET3.5アプリケーションは、散発的に次の例外System.Web例外をスローします。
クライアントが切断されました
この例外が発生するのはなぜですか?私のアプリケーションは、負荷分散されたWindows Server 2003IIS6.0サーバーで実行されています。
vbdork.net ドメインは現在は機能していないようです。このエラーを検索すると、この記事への参照がいくつか見つかりました。そのため、Google にキャッシュされたバージョンを見つけたので、参照用にここに投稿しています。元の URL は http://vbdork.net/post/2009/02/10/The-client-disconnected.aspxでした。
The client Disconnected というメッセージが表示されます。
Web ファームにいて、ユーザーが複数の選択を行うことができるページがある場合、このエラー メッセージが散発的に表示される可能性があります。通常は、次のシナリオで発生します。
ユーザーはポストバックのイベントを持つドロップダウン リスト ボックスを選択しますが、ユーザーは要求がユーザーに送り返される前にこれを再度行い、ユーザーは別の Web サーバーで発生する 2 番目のイベントを作成しています。 webserver は古いイベントの結果をユーザーに返そうとしますが、ユーザーは現在別の webserver にいるため、そのユーザーは存在しません。
ユーザーにエラーが表示されることはありませんが、エラーをキャッチして電子メールで送信/ログに記録すると、以下に示すようにエラーが表示され、完全にイライラします。この種のエラーをトラップしている限り、何も問題は発生しません。
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番目のサーバーにバウンスする新しい要求を開始しているために発生しています。彼のアドバイスは単にそれを無視することです。
私のアドバイスは、ロードバランサーが後続のリクエストでクライアントを同じサーバーに固定しない理由を理解することです。「スティッキー」セッションとも呼ばれます。
また、同様の質問に対するこの回答も確認してください。その場合、Web ファームはありません。
この例外は、
ViewState
が「大きく」なり、前のリクエストが完了する前にユーザーがボタンをクリックした場合にスローされます。[...] ポストバックが ajax を使用しているため、これは非常に簡単に発生ViewState
します。そのため、サーバーへの送信中にブラウザが応答を停止することはありません。
web.configのmaxPageStateFieldLengthを使用して、ビューステートを複数のフィールドにチャンク化して修正してみてください。
<pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="false" maxPageStateFieldLength="20">
その他の考えられる原因: 実際には Ajax をサポートしていないコントロールを使用しています。Ajax は非同期要求を処理できるはずですが、テレリック (ajax) ツリービューなど、一部のコントロールが機能しません。(いつものように、テレリックのインターネット警察がこの悪評を検閲するのを待っています。)