2009-06-16 26 views
6

我正在支持ASP.Net 3.5 Web应用程序,并且用户在尝试运行报告30秒后遇到超时错误。环顾网络,似乎很容易改变代码中的超时时间,不幸的是我无法访问代码并重新编译。无论如何要为Web应用程序,工作进程,IIS或整个机器配置默认值?使用配置更改默认的SqlCommand CommandTimeout而不是重新编译?

这里是堆栈跟踪最多的地方是在System.Data的情况下,我失去了一些其他的问题点:

[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1948826 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844747 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 
    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392 
    System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33 
    System.Data.SqlClient.SqlDataReader.get_MetaData() +83 
    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297 
    System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32 
    System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141 
    System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12 
    System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10 
    System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +130 
    System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +162 
    System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +115 

- 编辑

必须有代码之外的东西本身 - 我已经下载了数据库,并在安装在测试服务器上的同一网站上运行它,并运行时间超过30秒并返回报告。我比较了来自.Net目录中的machine.config和web.config文件,并且它们看起来是相同的,比较了两个IIS设置,还查看了SQL Server配置,唯一的区别是生活服务器集群在64位W2K3上,而测试服务器在32位上。

回答

14

不幸的是,我过去读过的所有内容都说不,不能通过配置进行控制。这是一个无赖。

2

我所知道的最好的是,您可以在连接字符串中设置连接超时,该连接字符串控制ADO在尝试连接到SQL Server时等待多久并且不会影响命令超时。

我个人认为应该有办法改变这个设置。假设这个程序集并没有很强的名字,那么最好的办法可能是对代码进行反向工程,修改源代码并用新名称重新部署程序集。

3

不能从连接字符串或外部设置中设置命令超时,抱歉。

有时驱动程序会将连接字符串中的'timeout'参数解释为连接超时和命令超时期限,但在技术上这是一个“错误”。喜欢这个标准。

0

这不是很难推出自己的?只需在AppSettings下创建一个自定义的SqlCommandTimeout设置即可。如果您已经在使用某种SqlCommandFactory来创建您的SqlCommand或具有某种SqlCommand基类,那么您可以轻松地进行更改。如果没有,那么你可能不太在意你的代码是否想把它放在配置文件中。

问候, 詹姆斯

+1

我敢肯定,它不是,但是,正如我在这个问题说,我没有访问源代码。如果今天再次提出这个问题可能会出现在服务器故障。 – robertc 2010-06-03 10:31:36

相关问题