web-dev-qa-db-ja.com

「クライアントが切断されました」というASP.NET例外の原因は何ですか?

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

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

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

30

Vbdork.netドメインは現在無効になっているようです。このエラーを検索したところ、この記事への参照がいくつか見つかりました。だから私はそれのグーグルキャッシュバージョンを見つけて、参考のためにここに投稿しています。元のURLは http://vbdork.net/post/2009/02/10/The-client-disconnected.aspx でした。

The client Disconnectedというメッセージが表示されます。

Webファームを使用していて、ユーザーが複数の項目を選択できるページがある場合、このエラーメッセージが散発的に表示される可能性があります。これは通常、次のシナリオで発生します。

ユーザーはポストバックでイベントが発生するドロップダウンリストボックスを選択しますが、ユーザーは、リクエストがユーザーに返送される前にこれを再度実行します。ユーザーは、他のWebサーバーで発生する2つ目のイベントを作成します。 webserverは古いイベントの結果をユーザーに返そうとしますが、ユーザーは他のWebサーバー上にいるため、ユーザーはそこにいません。

ユーザーにエラーが表示されることはありませんが、エラーをキャッチしてメールやログに記録している場合は、次のように表示され、完全にイライラします。この種のエラーをトラップしている限り、何も問題が発生しない限り、心配する必要はありません。無視してください。問題にはなりません。

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)
31
Paul Prewett

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

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

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

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

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

7
NotMe

Telerikコンポーネントを使用している場合は、RadCompressionモジュールを削除します。

4

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

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

クレジット Russell Clarvoe

2
Michael

web.configのmaxPageStateFieldLengthを使用して、ビューステートを複数のフィールドに分割することで修正を試みます。

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

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

0
NNM