在阅读之前请注意我已经搜索了这篇并阅读了大量关于SO和其他地方的文章,目前还没有任何建议。
我在登录我的MVC 3应用程序时随机收到超时错误。它发生在超过一半的时间 - 所有其他时间应用程序登录就好了。如果它不起作用,它会尝试大约10秒然后错误。
错误:
异常:“执行命令定义时发生错误。有关详细信息,请参阅内部异常。” 内部异常:{“超时已到期。在操作完成之前已经过了超时时间,或者服务器没有响应。\ r \ n时间已过期。在操作完成之前已经过了超时时间,或者服务器没有响应。”}
这发生在我的存储库类中,它直接与实体框架交互。
登录时只需从数据库中快速检查,例如:
return entities.Users.SingleOrDefault(user => user.UserName == userName);
return (entities.Users.SingleOrDefault(u => u.UserId == user.UserId || u.UserName == user.UserName) != null);
我尝试过的事情:
如果有帮助:
以下是事件日志的完整例外:
Exception information:
Exception type: SqlException
Exception message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
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()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
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.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
答案 0 :(得分:2)
您可以通过设置 SQL Server Profiler 来检查数据库服务器中的问题。
您可以通过Google搜索找到有关SQL Profiler的大量信息。这是一个site with a video that might help you get started.
答案 1 :(得分:0)
编辑:虽然这确实对我有帮助,但这不是解决方案。对于将来阅读的人来说,问题仍然存在。
只是为了让每个人都知道 - 我相信我已经找到了这个问题。通过SQL事件探查器,我看到用于访问SQL的帐户实际上是本地系统帐户。然后我意识到,为了尝试先修复问题,我更改了ASP.NET v4.0应用程序池以使用本地系统帐户。我去了将Identity更改回'ApplicationPoolIdentity',将IIS APPPOOL \ ASP.NET v4.0用户添加到数据库中,到目前为止一切都运行良好。 @DOK - 非常感谢有关SQL事件探查器的信息,它帮助极大!还要感谢其他人!