在托管与同一数据库通信的不同Web应用程序的两个不同物理服务器上使用相同的连接字符串是否从同一连接池中获取连接?或者是在应用程序级别限制的池连接?
我问,因为我继承了一个7年历史的.NET 1.1 Web应用程序,该应用程序充满了内联SQL,未封闭和不受限制的sql连接和datareader对象。最近,我的任务是编写一个托管在另一台服务器上的小型Web应用程序,并与同一个数据库进行通信,因此使用相同的数据库连接字符串。我创建了一个LINQ对象来读取和编写应用程序所需的一个表。现在最初的.NET 1.1应用程序抛出了像
这样的异常“超时已到期。在从池中获取连接之前已经过了超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。”
也许这些都没有发表,但想得到你的意见,以确保我涵盖我的所有基础。
谢谢!
答案 0 :(得分:4)
无法在两台独立的机器之间汇集连接。但是,您的SQL Server将具有总连接的连接限制。
最有可能发生此错误,因为应用程序未返回到连接池的连接。这可能发生,因为连接没有正确处理。这可能是由于代码不好(它使用了一个使用块,还是最后一次尝试捕获?),或者如果使用SQLDataReader会导致连接在执行SQL的代码退出后保持打开状态。
答案 1 :(得分:0)
连接池保存在您的应用程序池中,因此单独的计算机不应该从单独的应用程序池中窃取。有关连接池的一些信息,请查看here。我还建议打开性能计数器,看看bottom of this article,看看那里发生了什么。
也可能想检查SQL Server上的最大连接数。在管理工作室 右键单击服务器名称 - >属性 - >连接
查找“最大并发连接数(0 =无限制)”