2010-12-17 15 views
2

現在、.NET 4.0(Windows 7)上で動作するASP.NET MVC 2アプリケーションをデバッグしています。現在はVisual Studio Debugging Web ServerのCassiniにあります。異なるスレッドでBeginRequestとEndRequestを実行するCassini(VS WebDev)

私は突然、Application.EndRequestハンドラで例外が発生していたときに、すべて正常に動作していました。この問題を調査した結果、CassiniがBeginRequestとは異なるスレッドでEndRequestを呼び出していたことがわかりました(BeginRequestで設定され、EndRequestハンドラで使用されていたThreadStatic変数はnullでした。と呼ばれる)。

CassiniがBeginRequestとEndRequestを別のスレッドで実行する理由は何でしょうか?

理由は、 'Async' Pageディレクティブ(Do ASP.NET Requests always BeginRequest and EndRequest on the same thread?を参照してくださいが、私のPageディレクティブには「Async」属性がありません)が原因である可能性があります。

別の原因が必要です。

ありがとうございました!

答えて

5

ASP.NETは一般にthread-agileです。要求全体が1つのスレッドで処理されると想定するべきではありません。スレッド静的変数の代わりにHTTPコンテキストを使用します。

要求処理中にスレッドが切り替えることができる場所は限られていますが、IMOを想定しないことをお勧めします。

関連する問題