ASP.NET 4.0 Webフォームアプリケーションで断続的な問題が発生しています。Session_Startで設定されたセッション値がPage_PreInitで使用できない
はSESSION_STARTでは、私はセッションでマスターページファイルのパスを格納します。
はprotected void Session_Start(Object sender, EventArgs e)
{
// Not shown: get master page path from database
Session["MasterPagePath"] = PathIGotFromTheDatabase;
}
はその後、私のページPage_PreInitで、私はPage.MasterPageFile
protected void Page_PreInit(object sender, EventArgs e)
{
Page.MasterPageFile = Session["MasterPagePath"] + @"/MyMasterPage.Master";
}
を設定するには、そのセッション値を使用しますこれは99%の時間で動作しますが、時には何かが壊れ、Session ["MasterPagePath"]がnullです。ユーザーは、サイトを再び使用するために、アクティブなブラウザセッションをすべて終了する必要があると報告します。
私はSession_StartにSession ["MasterPagePath"]を設定しているので、常に私のページのPreInitメソッドで使用できるはずです。私のセッションが期限切れになった場合は、Page_PreInitが呼び出される前にSession_Startによって再セッションされます。
ここに何か不足していますか?どのような条件の下で私が何を記述することができますか?私はそれが価値があるもののためにInProcセッション状態を使用しています。
私は、ASP.NETが新しいセッションを作成する必要があるかどうかを 'Pre_Init'の前に' Page request'-stageで決めると仮定します。 http://msdn.microsoft.com/en-us/library/ms178472.aspx したがって、私はこれが "ページライフサイクル"の問題ではないと思います。 –
どのフレームワークを使用していますか?これらのコメントを読んだことがありますか?http://msdn.microsoft.com/en-us/library/ms178581.aspx#10? –
@Tim 2つのリクエストに同じセッションIDが付いてくると、Session_Startが2回呼び出されるという興味深いコメントがあります。私はそれがこれらの行に沿った同時性または競合状態の問題かもしれないと思っていましたが、私の理解は、ASP.NETが必要に応じてセッションをロックすることになっているということです。 –