我的某些 Web 服务器出现以下错误。我不知道我的服务器发生了什么,不知道这是与 SQL DB 相关还是与 Web 服务器相关。请帮我排除故障。
Message::Save- Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Norman.Message.Save(Int32 nSiteID, String sBody, Int32 nUserID, String sUserIP)
答案1
根据故障排除:超时已过在 TechNet 上:
当 SQL Server 数据库引擎实例未运行、服务器名称输入错误或者存在网络问题或防火墙时,通常会出现“超时已过期”错误。
该页面列出了可能存在的一些问题及其解决方案:
- 服务器名称输入错误。
- 服务器上的 SQL Server 服务未运行。
- 数据库引擎实例的 TCP/IP 端口被防火墙阻止。
- 数据库引擎未监听端口 1433,因为该端口已被更改,或者它不是默认实例,并且 SQL Server Browser 服务未运行。
- SQL Server Browser 服务正在运行,但 UDP 端口 1434 被防火墙阻止。
- 客户端和服务器未配置为使用相同的网络协议。
- 网络无法将服务器名称解析为 IP 地址。可以使用 PING 程序进行测试。
- 无法使用该 IP 地址连接网络。可以使用 PING 程序进行测试。
如果您确实可以连接到服务器,那么这可能与锁有关,正如 Bart 在他的评论中提到的那样。
异常发生在名为 的方法中Norman.Message.Save
。您应该查看该段代码,看看自己是否能发现问题 - 如果您知道问题发生在代码的哪个区域,您会惊讶于自己能如此频繁地发现问题。
如果代码中没有明显的问题,您可能需要在执行此查询时监视锁。Stack Overflow 上的这个问题为您提供几种监控锁的方法,也可能为您提供一些问题的线索。