1

我正在尝试关注此处的博客文章:http ://www.philliphaydon.com/2012/06/using-nhibernate-with-servicestack/尽管我的代码遇到了问题。基本上,我正在像 Phillip 一样设置 SessionFactory,而且我的服务看起来与 Phillip 的相同。

我遇到的问题是当试图从数据库中获取数据而不单步执行函数时——看起来会话在被访问之前就被终止了,然后代码似乎只是简单地崩溃了:

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

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

NH 教授 ServiceStack 问题2 http://i.stack.imgur.com/DfNSi.png

有点奇怪,如果有人对为什么会发生这种情况有任何答案,将不胜感激!

4

1 回答 1

3

如果您在 EndRequest 上处理会话会发生什么?这应该使您不必担心每次进行数据库调用时都会处理您的会话。

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

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

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

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 服务器出现内存泄漏和僵尸连接。

希望这会有所帮助。

于 2013-01-16T20:48:25.547 回答