C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2008/12/13 23:57
シリアル化の際に、異なるキーで保存されているセッション値の間で、オブジェクトグラフの共有がされないんだけど…。
InProc の場合はそもそもシリアル化が行われていないので大丈夫。


[再現方法]

aspx に次の二つのコントロールを配置。

<asp:Label runat ="server" ID="Label1" />
<asp:Button runat="server" ID="Button1" Text="Button1" onclick="Button1_Click" />


コードビハインドに次のコードを記述。

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        object o = new object();
        HttpContext.Current.Session["o1"] = o;
        HttpContext.Current.Session["o2"] = o;
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    object o1 = HttpContext.Current.Session["o1"];
    object o2 = HttpContext.Current.Session["o2"];
    this.Label1.Text = object.ReferenceEquals(o1, o2).ToString();
}


Button1 をクリックすると、セッション状態のモードが InProc なら True と表示されるけど、StateServer だと False と表示される。
もちろん、InProc のように動作して欲しい。
スポンサーサイト



タグ: .NET C# ASP.NET