我们最近建立了一个新网站..。在高峰时段,大约有150个用户在活动。在高峰时段,我们每隔几分钟就会遇到一个问题,下面列出了例外文本。
System.Web.HttpUnhandledException:
Exception of type 'System.Web.HttpUnhandledException' was thrown.
---> System.Data.SqlClient.SqlException: The client was unable to establish a connection because of an error during connection initialization process before login.
Possible causes include the following:
the client tried to connect to an unsupported version of SQL Server;
the server was too busy to accept new connections;
or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: Named Pipes Provider, error: 0 - No process is on the other end of the pipe.) 我们的数据访问层使用以下语法调用各种DataTableAdapters。
编辑
是的,da是分配给DataTableAdapter的名称。不存在connection.Open(),因为DataTableAdapter负责所有这些,对吗?
using(TheDataLayer.some.strongly.typedNameTableAdapters.suchAndSuchTableAdapter da = new TheDataLayer.some.strongly.typedNameTableAdapters.suchAndSuchTableAdapter())
{
StronglyTyped.DataTable dt = new StronglyTyped.DataTable();
da.FillByVariousArguments(dt, ..., ...);
//da.Dispose();
return something;
}连接字符串看起来类似于:
<add name="MyConnectionString"
connectionString="Data Source=myDBServerName;Initial Catalog=MyDB;User ID=MyUserName;Password=MyPassword"
providerName="System.Data.SqlClient" />我在试图解决密码中的问题。有什么“简单”可以做,以尽量减少这个问题吗?
谢谢。
发布于 2011-01-12 17:08:02
您是否尝试过在连接字符串设置中直接使用“连接池”?
示例:
connectionString="....;Pooling=true;Min Pool Size=1;Max Pool Size=10;..."您可以在这里阅读更多信息:http://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.71%29.aspx
发布于 2011-01-12 17:22:11
如果没有看到实际打开和使用连接的代码,就很难知道问题出在哪里。
请用创建DataAdapter时发生的事情来更新您的问题(我猜这就是da的意思)。
另外,如果使用的是using语句,则不应该处理创建using语句的内容。
发布于 2012-08-15 01:19:37
我们有类似的问题,这只发生在我们的生产环境,这是特别与负载。在繁忙的时间里,我们会收到上述几个例外。
我们对这个异常发生的原因进行了大量的调查,并做了很多修改来解决这个问题。我们所做的事实上的改变就是通过将最小池大小设置为1,将最大池大小设置为10,从而解决了问题。(根据您的情况,它可能会有所不同)
当您有多个客户DB,并且使用默认连接字符串(即database=DBName;server=ServerName)时,这个问题将更加普遍。我们没有显式设置min/max池大小,因此采用默认设置,将Min池大小设置为0,最大池大小设置为100。
再次,我没有具体的证据,但理论是,在繁忙的时间,在一天的繁忙时间,它做了几个连接到数据库服务器和数据库服务器被轰炸了大量的连接请求单点到多个数据库。无论是应用程序服务器还是DB服务器,都有在短时间内处理这么多连接的带宽。而且,这种情况发生在大多数数据库的服务器上。虽然我们一次没有看到大量的连接,但是Application无法在短时间内连接到数据库,因为它有大量的请求。
在我们设置min池大小之后,我们就会出现这个问题,因为每个数据库至少有一个连接,而每个数据库总是可用的;如果需要连接到多个数据库,那么在请求新数据库之前,我们已经有了至少一个到可用数据库的连接。
https://stackoverflow.com/questions/4671559
复制相似问题