有时在System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)中获取Timeout过期(...)

时间:2011-09-08 08:38:25

标签: c# asp.net sql-server-2008 ado.net windows-server-2003

我的网站大部分时间都运行良好,但有时我会收到超时过期错误,并且在1-15分钟内无法执行任何操作。第一次出现错误时:

The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) (...)

之后,如果我尝试刷新页面,我会继续:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server  is not responding.   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
(...).

我使用的每个连接都是SqlDataSource,或者使用以下代码打开:

SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Faktury_RebuildConnectionString"].ToString());
SqlCommand myCommand = new SqlCommand("Command String", myConnection);
try{                    
  myConnection.Open();
  somecodehere()
}
finally
{
  if (myConnection != null)
  {
    myConnection.Close();
  }
}

web.config中的连接字符串是Data Source=xxx\;Initial Catalog=xxx;User ID=xxx;Password=xxx;Max Pool Size=100;

我试图关闭合并,但没有帮助。我检查了每个连接是否正确处理,确实如此。所有SELECT都很好 - 意味着它们不会花费太多时间。特别是我可以看到应用程序运行正常时。

当我离开我的网站一段时间(15-60分钟)并且第一次再次输入时,也会发生此错误;那么我需要做的就是刷新它然后工作正常。

在出现此错误时,SQL Server工作正常,其他网站使用大多数相同的选择查询都可以正常工作。

有人建议那里可能有什么问题吗?我已经没想完了。

编辑: 至少在闲置较长时间后不必刷新页面并使这一次超时到期时,这将是有用的。

1 个答案:

答案 0 :(得分:0)

ADO.NET中有两个主要的Timeout属性。

  1. 连接的连接超时。可以通过在Connection String中设置Connection对象的ConnectionTimeout属性来解决。
  2. 数据访问超时(命令对象)。您可以将CommandTimeout属性设置为Command对象。我建议您将CommandTimeOut属性设置为更大的一个值。试试这个。请告诉我这是否可以解决这个问题。如果您有任何其他问题,请随时告诉我。