【发布时间】:2011-01-05 09:07:03
【问题描述】:
我的应用程序由几个模块组成:一个网站,以及一些从客户端应用程序接收请求的服务。
由于所有这些模块都处理几乎相同的数据,因此我希望为所有这些模块使用相同的缓存。
我正在使用静态类来引用 nHibernate 的二级缓存(SessionFactory 对象),并且我已经在 IIS 上的同一网站内设置了网站和 Web 服务。
但是,静态 SessionFactory 变量在网站和 Web 服务之间是不同的。
下面是静态 SessionManager 类的代码:
public static class SessionManager
{
private static ISessionFactory _sessionFactory = null;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
if (System.Web.HttpContext.Current != null)
{
log4net.Config.XmlConfigurator.Configure();
log4net.ILog log = log4net.LogManager.GetLogger("General");
log.InfoFormat("creating a new session factory for process: {0} (id = {1}), \n stack trace is: {2}",
System.Diagnostics.Process.GetCurrentProcess().ProcessName, System.Diagnostics.Process.GetCurrentProcess().Id,
new System.Diagnostics.StackTrace().ToString());
_sessionFactory = DAOBase.GetSessionFactory();
}
else
{
_sessionFactory = DAOBase.GetSessionFactoryForWin();
}
}
return _sessionFactory;
}
}
public static void BindSessionToRequest()
{
ISession session = SessionManager.SessionFactory.OpenSession();
NHibernate.Context.CurrentSessionContext.Bind(session);
}
public static void UnbindSession()
{
ISession session = NHibernate.Context.CurrentSessionContext.Unbind(SessionManager.SessionFactory);
if (session != null && session.IsOpen)
{
session.Close();
}
}
public static ISession GetCurrentSession()
{
return SessionFactory.GetCurrentSession();
}
}
以及生成的日志:
对于网站:
2011-01-05 10:54:54 信息常规 - 为进程创建新会话工厂:aspnet_wp (id = 7892),
堆栈跟踪是:在 Managers.SessionManager.get_SessionFactory()
在 Managers.SessionManager.BindSessionToRequest()
在 Managers.SessionPerRequestHttpModule.Context_BeginRequest(对象发送者,EventArgs e)
在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously)
在 System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(异常错误)
在 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext 上下文,AsyncCallback cb,对象 extraData)
在 System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest WR)
在 System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest WR)
在 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb,Int32 iWRType)
对于网络服务:
10:55:20 信息常规 - 为进程创建新会话工厂:aspnet_wp (id = 7892),
堆栈跟踪是:在 Managers.SessionManager.get_SessionFactory()
在 Managers.SessionManager.BindSessionToRequest()
在 Managers.SessionPerRequestHttpModule.Context_BeginRequest(对象发送者,EventArgs e)
在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously)
在 System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(异常错误)
在 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext 上下文,AsyncCallback cb,对象 extraData)
在 System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest WR)
在 System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest WR)
在 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
我正在使用 IIS5(糟糕,我知道),并且我已经尝试了所有我能想到的配置选项。我已将站点和服务创建为同一站点下的虚拟目录,我已将其保护级别设置为“低(IIS 进程)”等,但无济于事。
有人有想法吗?
在此先感谢,
强尼
【问题讨论】:
标签: asp.net nhibernate iis