Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
こんにちは SharePoint サポートの森 健吾 (kenmori) です。
今回の投稿では、SharePoint Server 2013/2010 において、ASP.NET セッション状態を使用する方法をご説明します。
ASP.NET セッション状態を使用すると、同一セッションを維持している限りは、サーバー側にデータを格納し、取り出すことが可能です。
下記のコードの様に Page.Session["<キー>"] に値を格納したり、取り出したりするだけで実現できます。
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
try
{
// セッション状態からの読み込み
Label1.Text = Page.Session["DATA"].ToString();
}
catch (Exception ex)
{
Label1.Text = "(none)";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
// セッション状態への書き込み
Page.Session["DATA"] += "<BR>" + DateTime.Now.ToString() + " " + TextBox1.Text;
}
しかし、SharePoint Server で、何も構成せずに上記のコードを含むWebパーツを展開して、表示させた際に、下記のようなエラーが診断ログに記録されます。
06/05/2015 21:48:26.99 w3wp.exe (0x1F38) 0x49D4 SharePoint Foundation General ajlz0 High Getting Error Message for Exception System.Web.HttpUnhandledException (0x80004005): 種類 'System.Web.HttpUnhandledException' の例外がスローされました。 ---> System.Web.HttpException (0x80004005): セッション状態は、構成ファイルまたは Page ディレクティブで enableSessionState が true に設定されているときのみ使用できます。System.Web.SessionStateModule またはカスタム セッション状態モジュールがアプリケーション構成の <configuration>\<system.web>\<httpModules> セクションに含まれていることも確認してください。 場所 System.Web.UI.Page.get_Session() 場所 SessionWebPart.SessionWP.SessionWP.Button2_Click(Object sender, EventArgs e) 場所 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 場所 System.Web.UI.Page.HandleError(Exception e) 場所 System.Web.UI.Page.Proces... 0c5f0d9d-2651-d0e4-46ae-66b4e29d6a5a
SharePoint Server はファーム構成で実装すると、Web フロント エンド サーバーが複数台存在することになります。ASP.NET の観点では、このような状況下で ASP.NET セッション状態を構成するためには、StateServer や SQLServer モードを使用することが適切ですが、SharePoint 上ではどのような構成を実施すれば良いのでしょうか。
タイトル : セッション状態モード
アドレス : https://msdn.microsoft.com/ja-jp/library/ms178586(v=vs.100).aspx
対処策
SharePoint Server で、ASP.NET セッション状態を使用する場合は、PowerShell で Enable-SPSessionStateService コマンドレットを下記の様に実行するだけで SQLServer モードのセッション状態が構成できます。
Enable-SPSessionStateService -DefaultProvision
上記のエラー メッセージは ASP.NET のモジュールが返していますので、SharePoint セッションを構成するためには、自動で構成を行う Enable-SPSessionStateService を実行するだけで問題ありません。
タイトル : Enable-SPSessionStateService
アドレス : https://technet.microsoft.com/ja-jp/library/ff607857.aspx
説明
上記コマンドを実行することで、セッション状態管理用のデータベースが生成されます。また Web アプリケーション ルートの web.config には下記のような記載が追加されます。
system.web 直下<sessionState mode="SQLServer" timeout="60" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=DBServer;Initial Catalog=SessionStateService_34904ccc31b545a2a1c2dcd3231bea85;Integrated Security=True;Enlist=False;Pooling=True;Min Pool Size=0;Max Pool Size=100;Connect Timeout=15" />
system.webServer/modules 直下<add name="Session" type="System.Web.SessionState.SessionStateModule" />
上記構成の結果、Enable-SPSessionStateServiceコマンドレットを実行後であれば、前述のセッション状態を使用する Web パーツが正常に表示されます。
今回の投稿は以上になります。