1

アプリをServiceStackに移行中であり、ServiceStackサービスの実装内で標準のASP.NETセッションオブジェクトを使用する方法で概説されているように、ServiceStackControllerを使用して既存のMVC3コントローラーを登録しました。

テストプロジェクトの外で、記事で参照されているPageBaseクラスがどこにあるかわかりません。これは、ソリューションにコピーして貼り付ける必要があるものですか?

同じISessionにアクセスしようとしているカスタムIHttpHandler(.ashx)ページもいくつかありますが、参照されている投稿で呼び出されている基本クラスが表示されません。これは可能ですか、それともISessionを利用できるようにするためにこれらのIHttpHandlerをServiceStackサービスに移動する必要がありますか?

4

1 に答える 1

1

ASP.NET PageBase クラスは、 ServiceStack.Host.AspNet NuGet パッケージをインストールすると追加される T4 テンプレートです。

ServiceStack のキャッシングとセッションのサポートはすべて、MVC コントローラーから完全に独立しており、ASP.NET ベース ページは、ServiceStack の IOCを解決しICacheClientて生成されます。ISessionFactory

MVC コントローラーと ASP.NET ベース ページが自動配線されている場合は、それらをパブリック プロパティとして宣言するだけで、ServiceStack の IOCによって挿入されます。それ以外の場合は、シングルトンを使用して ServiceStack の IOC に直接アクセスできます。

var cache = Endpoint.AppHost.TryResolve<ICacheClient>();
var typedSession = cache.SessionAs<CustomUserSession>(  //Uses Ext methods
    HttpContext.Current.Request.ToRequest(),  //ASP.NET HttpRequest singleton
    HttpContext.Current.Request.ToResponse()  //ASP.NET HttpResponse singleton
);

セッションへのアクセスはすべて同じ方法で行われます。ServiceStack のService.cs基本クラスのサンプル コードは次のとおりです。

    private ICacheClient cache;
    public virtual ICacheClient Cache
    {
        get { return cache ?? (cache = TryResolve<ICacheClient>()); }
    }

    private ISessionFactory sessionFactory;
    public virtual ISessionFactory SessionFactory
    {
        get { return sessionFactory ?? (sessionFactory = TryResolve<ISessionFactory>()) ?? new SessionFactory(Cache); }
    }

    /// <summary>
    /// Dynamic Session Bag
    /// </summary>
    private ISession session;
    public virtual ISession Session
    {
        get
        {
            return session ?? (session = SessionFactory.GetOrCreateSession(Request, Response));
        }
    }

    /// <summary>
    /// Typed UserSession
    /// </summary>
    private object userSession;
    protected virtual TUserSession SessionAs<TUserSession>()
    {
        return (TUserSession)(userSession ?? (userSession = Cache.SessionAs<TUserSession>(Request, Response)));
    }
于 2012-10-08T02:07:25.183 に答える