3

C#でWebアプリケーションを作成しています。

ページが読み込まれると、非同期スレッドを起動してデータを処理します。この処理の一部は、Cookieの更新です。ただし、Cookieを応答に保存すると

System.Web.HttpContext.Current.Response.Cookies.Add(cookie)、次の例外が発生します。

HttpException: Server cannot modify cookies after HTTP headers have been sent.

これを回避または修正する方法はありますか?

4

3 に答える 3

4

非常に正当な理由がない限り、ASP.NET要求でバッ​​クグラウンドワーカースレッドをスピンアップするべきではありません。最終的には、応答をブラウザに送り返す前に、このスレッドが作業を終了するのを待つ必要があります。

応答ストリームがすでに部分的に書き込まれていて、スレッドがCookieを追加しようとしているようです。

ここであなたの戦略を再考し、次のガイドラインを読んでください。

第6章—ASP.NETパフォーマンスの向上-スレッド化のガイドライン

それは時代遅れの文書のように見えますが、原則はまだ残っています。データプロセッサを呼び出す理由が、データプロセッサが長時間実行されているために、ASP.NETワーカースレッドがリソースをブロックして使い果たすのを防ぐためである場合は、代わりにページを非同期ページにすることを検討してください。

于 2011-03-31T23:34:41.920 に答える
1

はい、Cookie は http 応答の一部であり、非同期操作では、応答が生成されてブラウザに送信された後は何も変更できません。

これを回避するには、ブラウザで ajax ループを構築して非同期操作の結果を取得することをお勧めします。操作が完了すると、ajax 応答で Cookie を返すことができます。

于 2011-03-31T23:38:13.410 に答える
0

preinitまたはinitにある場合はどうなりますか?しかし、これが役立つかどうかはわかりません。 http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events

于 2011-03-31T23:34:27.650 に答える