为什么在StructureMap中抛出“超时过期”异常?

时间:2010-03-15 19:36:54

标签: nhibernate fluent-nhibernate asp.net-mvc-2 structuremap

我遇到以下异常:

“Timeout Expired。在从池中获取连接之前已经过了超时时间。这可能是因为所有池化的连接都在使用中并且达到了最大池大小。”

...来自我使用StructureMap和Fluent NHibernate开发的相对繁重的ASP.NET MVC 2站点。

我认为也许连接没有得到妥善处理。您认为这可能导致什么?可能是我使用InstanceScope.Hybrid吗?

这是我的NHibernateRegistry类;在此先感谢您的帮助:

using MyProject.Core.Persistence.Impl;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.ByteCode.LinFu;
using NHibernate.Cfg;
using MyProject.Core.FluentMapping;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;

namespace MyProject.Core.Persistence
{
    public class NHibernateRegistry : Registry
    {
        public NHibernateRegistry()
        {
            FluentConfiguration cfg = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2005.ConnectionString(
                              x =>
                              x.FromConnectionStringWithKey(
                                  "MyConnectionString"))
                              .ProxyFactoryFactory(typeof (ProxyFactoryFactory).AssemblyQualifiedName))
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<EntryMap>());

            Configuration configuration = cfg.BuildConfiguration();

            ISessionFactory sessionFactory = cfg.BuildSessionFactory();

            ForRequestedType<Configuration>().AsSingletons()
                .TheDefault.IsThis(configuration);

            ForRequestedType<ISessionFactory>().AsSingletons()
                .TheDefault.IsThis(sessionFactory);

            ForRequestedType<ISession>().CacheBy(InstanceScope.Hybrid)
                .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());

            ForRequestedType<IUnitOfWork>().CacheBy(InstanceScope.Hybrid)
                .TheDefaultIsConcreteType<UnitOfWork>();

            ForRequestedType<IDatabaseBuilder>().TheDefaultIsConcreteType<DatabaseBuilder>();
        }
    }
}

0 个答案:

没有答案