ServiceStack& NHibernate Integration创建两个会话?

时间:2013-01-12 17:30:22

标签: rest fluent-nhibernate servicestack

我正在尝试关注此处的博文:http://www.philliphaydon.com/2012/06/using-nhibernate-with-servicestack/虽然我的代码遇到了问题。基本上,我就像Phillip一样设置SessionFactory,我的服务看起来和Phillip一样。

我遇到的问题是当试图从数据库中获取数据而没有单步执行该函数时 - 看起来会话在被访问之前被杀死,然后代码似乎只是简单地分解:

NHProf ServiceStack Issues http://i.stack.imgur.com/hw1jW.png

奇怪的是,当我尝试通过单步调试函数时,我的结果很好,我和NHProf同意:

NH Prof ServiceStack Issues2 http://i.stack.imgur.com/DfNSi.png

有点奇怪,如果有人对此为何发生任何答案,我将不胜感激!

1 个答案:

答案 0 :(得分:3)

如果您在EndRequest上处理会话会怎样?这应该允许您在进行数据库调用时不必担心处理会话。

我在web.config中使用以下内容以允许我附加到FluentSessionManager.cs中的Init事件:

<httpModules>
        <add name="MyFramework.FluentSessionManager" type="MyFramework.FluentSessionManager" />
</httpModules>

在我的FluentSessionManager.cs中,它位于命名空间MyFramework:

public void Init(HttpApplication context)
    {
        context.EndRequest += Application_EndRequest;
    }

public static void Application_EndRequest()
    {
        // Perform the disposing of your session here.  Commit, close, etc....
    }

这应该允许您在EndRequest事件上关闭并处置会话。这也可以防止您的SQL服务器发生内存泄漏和僵尸连接。

希望这有帮助。