Asp.net
使用配置而不是重新編譯來更改預設的 SqlCommand CommandTimeout?
我支持 ASP.Net 3.5 Web 應用程序,使用者在嘗試執行報告時遇到超時錯誤 30 秒後。環顧網路,更改程式碼中的超時似乎很容易,不幸的是我無法訪問程式碼並重新編譯。無論如何要為 Web 應用程序、工作程序、IIS 或整台機器配置預設值嗎?
這是堆棧跟踪到它在 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 秒並返回報告。我在 live 和 test 上比較了 .Net 目錄中的 machine.config 和 web.config 文件,它們看起來是一樣的,比較了兩個 IIS 設置,還查看了 SQL Server 配置,唯一的區別是 live伺服器集群在 64 位 W2K3 上,而測試伺服器在 32 位上。
不幸的是,我過去讀到的所有內容都說不,不能通過配置來控制。這是一個無賴。
您無法從連接字元串或某些外部設置中設置命令超時,抱歉。
有時驅動程序會將連接字元串中的“超時”參數解釋為連接超時和命令超時期限,但這在技術上是一個“錯誤”。一定要喜歡標準。