【问题标题】:ASP.NET connection pool questionASP.NET 连接池问题
【发布时间】:2010-04-28 20:52:18
【问题描述】:

在两个不同的物理服务器上使用相同的连接字符串,这些服务器托管与同一个数据库通信的不同 Web 应用程序,是否从同一个连接池中提取连接?还是池化连接仅限于应用程序级别?

我问是因为我继承了一个 7 年历史的 .NET 1.1 Web 应用程序,其中充满了内联 SQL、未关闭和未处理的 sql 连接和数据读取器对象。最近,我的任务是编写一个小型 Web 应用程序,该应用程序托管在另一台服务器上并与同一个数据库通信,因此使用相同的数据库连接字符串。我创建了一个 LINQ 对象来读取和写入应用程序所需的一个表。现在原始的 .NET 1.1 应用程序正在抛出异常,例如

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

也许这些无关紧要,但想征求您的意见,以确保我涵盖了我的所有基础。

谢谢!

【问题讨论】:

    标签: asp.net sql connection pooling


    【解决方案1】:

    没有办法在两台不同的机器之间建立连接。但是,您的 SQL Server 将有总连接数的连接限制。

    这个错误很可能发生,因为应用程序没有将连接返回到连接池。这可能是因为未正确处理连接。这可能是由于代码不佳(它使用 using 块,还是 try catch finally?)或者使用 SQLDataReader 可能导致连接在执行 SQL 的代码退出后保持打开状态。

    【讨论】:

      【解决方案2】:

      连接池保存在您的应用程序池中,因此一台单独的机器不可能从一个单独的盒子应用程序池中窃取。查看here 以获取有关连接池的一些信息。我还建议在 bottom of this article 上查看性能计数器,以进一步了解其中发生的情况。

      还可能需要检查 SQL Server 上的最大连接数。在管理工作室 右键单击服务器名称--> 属性--> 连接

      查找“最大并发连接数(0 = 无限制)”

      【讨论】:

        猜你喜欢
        • 2011-04-23
        • 2011-07-10
        • 1970-01-01
        • 2011-04-01
        • 2012-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多