[英]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中解析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)));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.