【问题标题】:Using SharpArch Nhibernate with different types of SessionStorage将 SharpArch Nhibernate 与不同类型的 SessionStorage 一起使用
【发布时间】:2011-09-06 14:18:54
【问题描述】:

我有一个服务器应用程序,其中有 3 个场景,我似乎需要不同类型的休眠会话:

  1. 直接从服务器本身调用存储库(在引导时)
  2. 来自 Ria 服务(默认 ASP.NET Memberschip 服务)对存储库的调用
  3. 来自 WCF 服务的对存储库的调用

目前我已经用这样的Sharparch设置了我的休眠配置

/// <summary>
/// Due to issues on IIS7, the NHibernate initialization cannot reside in Init() but
/// must only be called once.  Consequently, we invoke a thread-safe singleton class to 
/// ensure it's only initialized once.
/// </summary>
protected void Application_BeginRequest(object sender, EventArgs e)
{
   NHibernateInitializer.Instance().InitializeNHibernateOnce(
       () => InitializeNHibernateSession());
    BootStrapOnce();
}       

private void InitializeNHibernateSession()
{
    NHibernateSession.Init(
        wcfSessionStorage,
        new string[] { Server.MapPath("~/bin/bla.Interfaces.dll") },
        Server.MapPath("~/Web.config"));
}

这适用于第三种情况,但不适用于前两种情况。 它似乎需要一些 wcf-session 特定的上下文。

SharpArch Init 方法似乎可以防止使用另一种类型的会话存储重新初始化它;

为三种不同的上下文创建不同会话的最佳方法是什么?

在我看来,这篇文章似乎与 this one 有关,这帮助我找到了正确的方向,但到目前为止我还没有找到解决方案。

【问题讨论】:

    标签: wcf nhibernate session ria s#arp-architecture


    【解决方案1】:

    我不确定您是否能够使用 S# 做您想做的事情。原因是您真的希望拥有 3 个单独的 Nhibernate 会话,每个会话都有自己的存储机制。当前的实现只允许一种存储机制,与会话数无关。

    我可以很容易地为您提供# 的 1 和 3,但不是两个,因为我从未使用过 RIA 服务。在 1 和 3 的情况下,您需要将 WCF 服务带出站点并将其放在自己的站点中。没有办法真正解决这个问题,因为它们的会话生命周期不同。

    您的另一种选择是为 NHibernate 提供您自己的会话管理,而不使用默认的 S#。您可以查看 S# 版本的代码并在此基础上创建自己的代码。

    【讨论】:

    • 我们也得出了结论“我们在使用sharparch时不能拥有多个会话管理系统”。正因为如此,我们不再使用它了。
    • 很抱歉听到这个消息,但这并不适合所有人。我确实认为您可以使用它,但您需要修改您的架构才能这样做。 google 组的这个帖子可能对你有一些帮助:groups.google.com/group/sharp-architecture/browse_thread/thread/…。无论哪种方式,感谢您查看框架,祝您的项目好运。
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多