我在IIS下部署了一个Web应用程序。它已经出现超时错误,我相信我已经将问题跟踪到没有正确处理SQL连接的代码。
这需要很多手术来修复,所以至少在我完成实现和测试新代码之前,正确地使用using
块,我决定将连接池大小提升到天文数字。但这似乎没有帮助。我的连接字符串是:
Data Source = MyServer; Initial Catalog = MyDb; User ID = MyUser; Password = MyPwd; Max Pool Size = 10000
我的日志文件显示:
System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。
在此期间我一直保持性能监视器的开放状态,并且用户连接的数量最多可以达到150左右。所以我认为我们的连接已经不足了。
还有什么可能导致此错误?
答案 0 :(得分:1)
不幸的是,SqlCommand不服从ConnectionString或SqlConnection的超时。它必须手动设置。这是因为连接字符串中提到的超时用于连接,而不是执行。所以请考虑通过代码设置它的超时时间。
var conn = new SqlConnection(cs);
var cmd = conn.CreateCommand();
cmd.CommandTimeout = conn.ConnectionTimeout;
...