1

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

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

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

也许这些是无关紧要的,但想得到你的意见,以确保我涵盖了我所有的基础。

谢谢!

4

2 回答 2

4

无法在两台单独的机器之间汇集连接。但是,您的 SQL Server 将对总连接数设置连接限制。

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

于 2010-04-28T21:03:42.430 回答
0

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

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

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

于 2010-04-28T21:54:35.767 回答