C# 为什么多个用户不能访问我的网站?

C# 为什么多个用户不能访问我的网站?,c#,asp.net-mvc,nhibernate,C#,Asp.net Mvc,Nhibernate,我正在尝试使用C#MVC nHibernate构建一个网站。这一切都很好,但当我在多个浏览器中浏览我的网站时,我会发现错误: 已存在与此连接关联的打开的DataReader,必须先关闭该连接 我已将我的许多服务绑定到一个会话(ISession) 其中IContentService是我的主要查询类: public interface IContentService { IQueryable<Source> Sources { get; } } public clas

我正在尝试使用C#MVC nHibernate构建一个网站。这一切都很好,但当我在多个浏览器中浏览我的网站时,我会发现错误:

已存在与此连接关联的打开的DataReader,必须先关闭该连接

我已将我的许多服务绑定到一个会话(ISession)

其中IContentService是我的主要查询类:

 public interface IContentService
 {

    IQueryable<Source> Sources { get; }
  }

public class ContentService : IContentService
{
    private readonly ISession _session;
    public ContentService(ISession session)
    {
        _session = session;
    }

   public IQueryable<Source> Sources
    {
        get { return _session.Query<Source>(); }
    }
公共接口IContentService
{
IQueryable源{get;}
}
公共类内容服务:IContentService
{
专用只读会话;
公共内容服务(ISession session)
{
_会话=会话;
}
公共可查询来源
{
获取{return}session.Query();}
}

不确定为什么它不能访问多个查询这听起来很随机,但我的一位同事在我们支持的应用程序中遇到了类似的问题。他说这个问题与使用单例有关。
它是通过更改为瞬态来修复的。

这听起来很随机,但我的一位同事在我们支持的应用程序中遇到了类似的问题。他说这个问题与使用单例有关。
它已通过更改为瞬态来修复。

出现这种情况的原因是您试图在不同线程之间使用相同的ISession。它这样做的原因是:

Bind<ISession>()
        ...
        .InSingletonScope();
Bind()
...
.InSingletonScope();
您的会话不应该是web环境中的单个会话。我建议使用nhibernate上下文会话


出现这种情况的原因是您试图在不同的线程之间使用相同的ISession。它这样做的原因是:

Bind<ISession>()
        ...
        .InSingletonScope();
Bind()
...
.InSingletonScope();
您的会话不应该是web环境中的单个会话。我建议使用nhibernate上下文会话


我将服务更改为InSingtonScope(),但它仍然给我带来错误。显然,我在读到它与多线程会话有关。我将服务更改为InSingtonScope(),但它仍然给我带来错误。显然,我在读到它与多线程会话有关。
Bind<ISession>()
        ...
        .InSingletonScope();