繁体   English   中英

我可以在由IHttpHandler托管的ASP.NET和现有的ASP.NET页中使用ServiceStack的ISession吗?

[英]Can I use ServiceStack's ISession in a ASP.NET hosted IHttpHandler and existing ASP.NET page?

我正在将我的应用程序迁移到ServiceStack,并且已经使用ServiceStackController注册了现有的MVC3控制器,如我如何在ServiceStack服务实现中使用标准ASP.NET会话对象所述。

我看不到在测试项目之外在哪里可以找到本文引用的PageBase类。 这是我需要复制/粘贴到我的解决方案中的东西吗?

我也有一些自定义的IHttpHandler(.ashx)页面,我试图在同一ISession上使用,但是在引用的帖子中没有看到针对该IHttpHandler的基类。 这是可能的,还是我需要将这些IHttpHandler移至ServiceStack服务以能够利用ISession?

ASP.NET PageBase类是一个T4模板 ,当您安装ServiceStack.Host.AspNet NuGet程序包时会添加该模板

ServiceStack的所有缓存和会话支持完全独立于MVC控制器,而ASP.NET基本页仅来自从ServiceStack的IOC中解析ICacheClientISessionFactory

如果您的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)));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM