この最近のプロジェクトまで、私は通常、インプロセス セッション状態を避けてきました。未処理の例外が発生した後に状態が失われるという問題があると思います。
リクエストのコンテキストでの例外はワーカー プロセスをダウンさせないため、これ自体が奇妙です。バックグラウンド スレッドまたはコールバックなどの例外である可能性がありますが、これは単純なサイトであり、特別なことは何も行われていません。
セッション ID は同じままで、Session_Start は後続の要求で呼び出されません (したがって、WP はリサイクルされません)。
私は非常に多くのロギングを有効にしていますが、データ層から例外が発生し、それが HttpUnhandleException 内の HttpException であることがわかります。その後すぐにホームページをブラウズすると、リクエストによって欠落に関する警告がログに記録されます。州。
悪い。これは私の開発ボックス (IIS Express) では発生せず、QA でのみ発生します。
編集:
ログの一部を次に示します。
2013-06-12 13:44:29,975 [23] FATAL MvcApplication 100.100.100.100 pxtgn GET An unhandled exception occurred in the web application. The full exception will be unrolled below.
2013-06-12 13:44:30,897 [23] FATAL MvcApplication 100.100.100.100 pxtgn GET Exception.Type: HttpUnhandledException
Exception.Source: System.Web
Exception.Message: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Exception.StackTrace: at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.HttpContext.InvokeCancellableCallback(WaitCallback callback, Object state)
at System.Web.UI.Page.LegacyAsyncPageBeginProcessRequest(HttpContext context, AsyncCallback callback, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Exception.Type: HttpException
Exception.Source: CompanyNameProductName.MvcCoreApp
Exception.Message: An error was reported by the data layer: 0Image not found1-10.1007_978-1-4471-4294-2_21-16
Exception.StackTrace: at CompanyName.CompanyNameProductName.imagedetail.Page_Load(Object sender, EventArgs e) in c:\DATA\Git\ProductName\CompanyNameProductNameMvc\imagedetail.aspx.cs:line 55
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
2013-06-12 13:45:07,913 [25] DEBUG StandardPage 100.100.100.100 pxtgn GET Initializing page 'default_aspx' for GET with query string:
2013-06-12 13:45:07,913 [25] ERROR StandardPage 100.100.100.100 pxtgn GET No User instance in session state. Check the log for signs that the session was started properly since a User object should aways exist in session state, setup via session start events in ASP.NET.
最後の行は、欠落状態の条件を示しています。pxtgn は、セッション ID の最初の 5 文字です。データ層が存在しない画像 ID についてバーフすることがわかっているページにアクセスしました。その後、次にヒットするページにより、チェックが行方不明の状態の問題をログに記録します。チェックと状態の参照はマスター ページのコードに含まれているため、任意のページにアクセスして問題を確認できます。これは、カスタム エラー ページが機能しないことも意味します。これが、私がバグを見つけた理由のようなものです。
チェックの後にa を追加Session.Abandon()
し、500 で応答して刑務所から出しましたが、これはかなり奇妙な問題です。私はコードベースが初めてで、セッションがクリアされているか、状態が上書きされているかをどこでもチェックしたと思います。