web-dev-qa-db-ja.com

HttpHandlerでASP.NETセッション状態を使用する方法

クライアントページ(クロスドメインではなく、クロスドメインIISサーバーなど))で実行されるHttpHandlerがあり、埋め込みリンクをクリックすると、サーバーのハンドラーから起動されます。これまですべてが正常に動作しています。

System.Web.HttpContext.Sessionオブジェクトを使用しようとしていますが、nullです。 HttpHandlerが呼び出されるまでセッションがないため、nullだと思いますか?ハンドラを複数回呼び出すと、呼び出しごとに新しいセッションが作成されますか?この場合、MSはHttpHandlerを呼び出すときにSessionオブジェクトを無効にしただけですか?誰でもこれを確認できますか?

この場合、呼び出し間の状態を維持するために何をしますか?なんらかのSQLベースのデータオブジェクト?ファイル?

TIA

56
Keith Barrows

HttpHandlerにIRequiresSessionStateインターフェースを実装させます。セッション状態の使用を有効にします。 IRequiresSessionStateはSystem.Web.SessionState名前空間。

136
Michael Morton

空のインターフェース IReadOnlySessionState を実装する必要があると思うので、コンテキストがロードされます。

編集して追加:

Michael Mortonの回答によると、implementIRequiresSessionState を使用して、Sessionオブジェクトにも書き込みアクセス権を付与できます

using System; 
using System.Web;
using System.Web.SessionState;
public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
   public bool IsReusable { get { return true; } }

   public void ProcessRequest(HttpContext context)
   {
       context.Response.Write(context.Session["kmx"]);
   }
}
8
KMX