【发布时间】:2014-01-28 18:58:16
【问题描述】:
我们最近使用迁移向导将我们的一个 Web 应用程序从 2.0 .net Framework 升级到了 4.0 (VS 2010)。当单用户测试时,该应用程序在较低的环境中运行良好。但是在将其部署到生产环境后,当一些用户(大约 20 多个)访问该应用程序时,我们看到了大量错误,并显示以下错误消息:
超时。在获得一个之前的超时时间 来自池的连接。这可能是因为所有汇集的 连接正在使用中并且已达到最大池大小。 StackTrace=
在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection 拥有连接)在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection 外部连接,DbConnectionFactory 连接工厂)在 System.Data.SqlClient.SqlConnection.Open()
请注意,此应用程序大量使用类型化数据集,我已经在代码中搜索了任何显式打开的连接对象(不通过类型化数据集),但没有找到。
不清楚为什么在切换到 4.0 框架后会出错。我们回滚到 2.0 框架,事情平静下来,所有超时错误都消失了。
无法使用soapUI 和LoadRunner 在较低的环境中重现它。
知道 4.0 与 2.0 内部有什么不同,还有关于如何调试/解决此问题的任何指示。
【问题讨论】:
-
听起来您在请求生命周期内没有正确处理 SQL 连接。如果不仔细审核您的数据库层代码,就无法说出原因和位置。
-
代码没有随着升级而改变。相同的代码适用于 2.0 框架。让我难过的是为什么它不适用于 4.0 框架。我相信,对于类型化的数据集,连接是在幕后建立的,应该在执行完命令后处理掉。
-
"连接是在幕后建立的" - 当然您可以这样做,但我建议您在任何应用程序的代码中显式控制连接大小或复杂性。这实际上与您的问题无关,尽管如果您这样做可能会更容易掌握正在发生的事情。
标签: asp.net strongly-typed-dataset connection-timeout