Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 亚音速如何处理连接?_.net_Subsonic - Fatal编程技术网

.net 亚音速如何处理连接?

.net 亚音速如何处理连接?,.net,subsonic,.net,Subsonic,在Nhibernate中,您可以通过在BeginRequest期间创建会话并在处关闭来启动会话 结束请求 public class Global: System.Web.HttpApplication { public static ISessionFactory SessionFactory = CreateSessionFactory(); protected static ISessionFactory CreateSessionFactory() {

在Nhibernate中,您可以通过在BeginRequest期间创建会话并在处关闭来启动会话 结束请求

public class Global: System.Web.HttpApplication
{
    public static ISessionFactory SessionFactory = CreateSessionFactory();

    protected static ISessionFactory CreateSessionFactory()
    {
        return new Configuration()
            .Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hibernate.cfg.xml"))
            .BuildSessionFactory();
    }

    public static ISession CurrentSession
    {
        get{ return (ISession)HttpContext.Current.Items["current.session"]; }
        set { HttpContext.Current.Items["current.session"] = value; }
    }

    protected void Global()
    {
        BeginRequest += delegate
        {
            CurrentSession = SessionFactory.OpenSession();
        };
        EndRequest += delegate
        {
            if(CurrentSession != null)
                CurrentSession.Dispose();
        };
    }
}
亚音速的当量是多少

据我所知,Nhibernate将根据endrequest关闭所有连接

原因:在解决亚音速项目中的一些遗留代码时,我遇到很多MySQL超时,这表明代码没有关闭连接

MySql.Data.MySqlClient.MySqlException: 连接错误:超时已过期。这个 之前已过超时时间 正在从池中获取连接。 这可能是因为 池连接正在使用中,最大 已达到池大小。生成日期:星期二, 2009年8月11日05:26:05 GMT System.Web.HttpUnhandledException: 类型异常 'System.Web.HttpUnhandledException' 被抛出。--> MySql.Data.MySqlClient.MySqlException: 连接错误:超时已过期。 在此之前已过超时时间 正在从池中获取连接。 这可能是因为 池连接正在使用中,最大 已达到池大小。在 MySql.Data.MySqlClient.MySqlPool.GetConnection() 在 MySql.Data.MySqlClient.MySqlConnection.Open() 在 亚音速.MySqlDataProvider.CreateConnection(字符串 新连接字符串)位于 SubSonic.MySqlDataProvider.CreateConnection() 在 亚音速.自动连接范围..ctor(数据提供程序 供应商)在 亚音速.MySqlDataProvider.GetReader(QueryCommand qry)at 亚音速.DataService.GetReader(QueryCommand cmd)在 亚音速.ReadOnlyRecord`1.LoadByParam(字符串 columnName,对象参数(值)

我的连接字符串如下

<connectionStrings>
    <add name="xx" connectionString="Data Source=xx.net; Port=3306; Database=db; UID=dbuid; PWD=xx;Pooling=true;Max Pool Size=12;Min Pool Size=2;Connection Lifetime=60" />
  </connectionStrings>

除非你特别用“SharedDbConnectionScope”包装你的东西,否则它总是一次性的。我以前见过这种情况,特别是在windows上测试MySQL时,问题是MySQL驱动程序有缺陷,无法关闭连接

我可以通过创建一个控制台应用程序和一个基本的读卡器来重新编程,然后在上面循环-bam。连接池错误


我知道答案不多,但你能做些什么。

在不直接使用亚音速之前,我也遇到过同样的错误。我们有一段Javascript,它每2分钟左右ping一次服务器,只是为了保持会话的活跃性,当它ping服务器时,我们使用DataReader调用了我们的成员。总之,长话短说,我们没有关闭阅读器,即使只有少数用户,小小的keep alive脚本也会慢慢吞噬我们160个允许的连接。您可能希望检查是否以这种方式使用亚音速(从查询中返回IDataReader,然后不处理它们)

Rob,我不理解这部分=“除非您专门用“SharedDbConnectionScope”包装您的东西,否则这总是一次性的。”。我该怎么做?。你能给我举个例子吗?如果我不想打开和关闭很多连接,我必须使用这个SharedDbConnectionScope?这似乎很重要!!如果我不关心交易,你知道我是否还需要一个TransactionScope吗?