32

私の.NET3.5アプリケーションは、散発的に次の例外System.Web例外をスローします。

クライアントが切断されました

この例外が発生するのはなぜですか?私のアプリケーションは、負荷分散されたWindows Server 2003IIS6.0サーバーで実行されています。

4

6 に答える 6

32

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)
于 2009-06-11T12:57:07.987 に答える
7

おそらく「クライアントが切断された」ためです...

ブラウザを閉じて、新しいページに移動し、アプリが読み込まれるのを待つのにうんざりしています...

真剣に、その問題に関する多くの情報については、このページをチェックしてください。

要約すると、これは、最初のサーバーが元の要求を処理しているときに、ブラウザーが2番目のサーバーにバウンスする新しい要求を開始しているために発生しています。彼のアドバイスは単にそれを無視することです。

私のアドバイスは、ロードバランサーが後続のリクエストでクライアントを同じサーバーに固定しない理由を理解することです。「スティッキー」セッションとも呼ばれます。

于 2009-04-30T22:31:12.527 に答える
4

また、同様の質問に対するこの回答も確認してください。その場合、Web ファームはありません。

この例外は、ViewStateが「大きく」なり、前のリクエストが完了する前にユーザーがボタンをクリックした場合にスローされます。[...] ポストバックが ajax を使用しているため、これは非常に簡単に発生ViewStateします。そのため、サーバーへの送信中にブラウザが応答を停止することはありません。

ラッセル・クラーボーの功績

于 2013-12-13T16:35:25.127 に答える
1

web.configのmaxPageStateFieldLengthを使用して、ビューステートを複数のフィールドにチャンク化して修正してみてください。

<pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="false" maxPageStateFieldLength="20">
于 2012-07-19T21:01:07.170 に答える
0

その他の考えられる原因: 実際には Ajax をサポートしていないコントロールを使用しています。Ajax は非同期要求を処理できるはずですが、テレリック (ajax) ツリービューなど、一部のコントロールが機能しません。(いつものように、テレリックのインターネット警察がこの悪評を検閲するのを待っています。)

于 2013-05-15T10:11:52.850 に答える