为什么不能有多个用户访问我的网站
本文关键字:访问 我的 网站 用户 不能 为什么 | 更新日期: 2023-09-27 18:33:11
我正在尝试使用C# MVC nHibernate构建一个网站。一切正常,但是当我在多个浏览器中浏览我的网站时,我收到错误:
已经有一个与此连接关联的打开的 DataReader,必须先关闭该读取器。
我已将我的许多服务绑定到一个会话(ISession)。
//ContentService Bingings
Bind<IContentService>().To<ContentService>().InRequestScope();
Bind<ISession>()
.ToMethod(
context =>
context.Kernel.Get<IMasterSessionSource>()
.ExposeConfiguration()
.BuildSessionFactory()
.OpenSession()
)
.WhenInjectedInto<IContentService>()
.InSingletonScope();
//GeneralService Bindings
Bind<ISession>()
.ToMethod(
context =>
context.Kernel.Get<IMasterSessionSource>()
.ExposeConfiguration()
.BuildSessionFactory()
.OpenSession())
.WhenInjectedInto<IGeneralService>()
.InSingletonScope();
Bind<IGeneralService>()
.To<GeneralService>()
.InSingletonScope();
//CrossSellService Bindings
Bind<ISession>()
.ToMethod(
context =>
context.Kernel.Get<IMasterSessionSource>()
.ExposeConfiguration()
.BuildSessionFactory()
.OpenSession())
.WhenInjectedInto<ICrossSellService>()
.InSingletonScope();
Bind<ICrossSellService>()
.To<CrossSellService>()
.InSingletonScope();
//Details Bindings
Bind<ISession>()
.ToMethod(
context =>
context.Kernel.Get<IMasterSessionSource>()
.ExposeConfiguration()
.BuildSessionFactory()
.OpenSession())
.WhenInjectedInto<IDetailsService>()
.InRequestScope();
Bind<IDetailsService>()
.To<DetailsService>()
.InRequestScope();
他们被要求用于其他用途。 例如我的详细信息服务:
公共接口 IDetailsService { 在此处覆盖;
}
public class DetailsService : IDetailsService
{
private static IContentService Context { get; set; }
public DetailsService(IContentService context)
{
Context = context;
}
...
其中 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>(); }
}
不知道为什么它不访问多个查询
看起来发生这种情况
的原因是因为您尝试在不同的线程中使用相同的 ISession。 它这样做的原因是因为:
Bind<ISession>()
...
.InSingletonScope();
您的会话不应是 Web 环境中的单一实例。 我建议使用nhibernate上下文会话。
为什么 Nhibernate 在我的 MVC 应用程序中的多个请求之间共享会话?
这
听起来很随机,但我的一位同事在我们支持的应用程序中遇到了类似的问题。他说这个问题与使用单例有关。它已通过更改为瞬态来修复。