私のアプリケーションは、Webサイトとクライアントアプリケーションから要求を受け取るいくつかのモジュールで構成されています。
これらのモジュールはすべて同じデータを操作するので、私はすべて同じキャッシュを使用したいと思います。
私は、静的クラスを使用してnHibernateの2番目のレベルのキャッシュ(SessionFactoryオブジェクト)を参照しています。IIS上の同じWebサイト内にWebサイトとWebサービスを設定しました。
しかし、静的SessionFactory変数は、WebサイトとWebサービスで異なります。
IIS上のWebサイトとWebサービスに同じキャッシュを使用
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();
}
}
し、得られたログ::ウェブサイトの
:
ここ は静的SessionManagerのクラスのコードです
2011-01-05 10時54分54秒INFO一般 - 作成しますプロセスのための新しいセッション工場:Managers.SessionPerRequestHttpModule.Context_BeginRequestでManagers.SessionManager.BindSessionToRequestでManagers.SessionManager.get_SessionFactory(で) () (オブジェクト送信者:aspnet_wp(ID = 7892)、
スタックトレースがあります、System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.ExecuteでのEventArgs e)の () System.Web.HttpApplication.ExecuteStep(IExecutionStepステップ、ブール& completedSynchronously)System.Web.HttpApplicationで ました。 System.WebのでApplicationStepManager.ResumeSteps(例外エラー)System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequestで (コンテキストのHttpContext、AsyncCallback CBが、extraDataオブジェクト)System.Web.HttpRuntime.ProcessRequestInternalで (HttpWorkerRequest WR) .HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr) at System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb、Int32 iWRType)
と、Webサービスのための:
十時55分20秒INFO一般 - プロセスのための新しいセッションファクトリの作成:管理者にManagers.SessionManager.get_SessionFactory(で) :
、aspnet_wp(ID = 7892)スタックトレースがありますSystem.Web.HttpApplication.ExecuteStepでSystem.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.ExecuteでManagers.SessionPerRequestHttpModule.Context_BeginRequest(オブジェクト送信者、のEventArgs電子) () で.SessionManager.BindSessionToRequest() (IExecutionStepステップ、ブール&が同期して完了しました) at 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 ) at System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr ecb、Int32 iWRType)
私はIIS5(yuck、私が知っている)を使用しています。私は同じサイトの下に仮想ディレクトリとしてサイトとサービスを作成しました。保護レベルを「低(IISプロセス)」などに設定しましたが、無駄です。
誰もがアイデアを得ましたか?事前に
おかげで、
ジョニー
私はアプリケーションオブジェクトとキャッシュオブジェクトの両方を使用しようとしましたが、どちらも機能しませんでした。 私はあなたのことを分かりやすく理解していれば、WebサイトとWebサービスの両方のDLLのアセンブリは共通でなければならないと思います(同じ物理ファイル、つまり両方のアプリケーションの同じbinディレクトリ)。 私は本当に私が静的なクラスを持っているということです。同じプロセス(プロセスIDで伝えることができます)内でTWICEを実行しています。つまり、そのようなことは静的な概念全体に反しています... –
- 私はWebSiteプロジェクトにWebサービスを移しました。今は、私が望むのと同じCacheオブジェクトを持っているようです。しかし、概念的にWebSiteとサービスは関連していないので、これは最適な解決策ではありません。だから私は答えたとして私の質問に印を付けていなかったし、私はWCF&.NET4.0サービスでちょっと試してみるつもりだ。 –