【问题标题】:.NET 4.0 Entity framework timeout expired [closed].NET 4.0 实体框架超时已过期 [关闭]
【发布时间】:2011-02-07 22:17:15
【问题描述】:

我正在使用 MVC3、.NET 框架 4.0 和实体框架开发一个 ASP.NET 网站。当我运行应用程序并对 SQL Server 2005 数据库执行简单选择时,我收到以下错误:

“抛出了 System.Data.SqlClient.SqlException:”超时。在操作完成之前超时时间已过或服务器没有响应。"

事情就是这样。我尝试登录并从管理工作室执行相同的查询,它工作。我使用 .NET 框架 4.0 和执行完全相同的查询的实体框架开发了一个小型控制台应用程序,它返回了我需要的信息。我什至从使用实体框架切换到 ADO.NET 类(SqlConnection 和 SqlCommand),当从 SqlCommand 实例执行选择时,我得到了完全相同的错误。

当我使用实体框架创建模型时,我能够从向导连接到数据库并且工作正常。我创建的所有类都没有任何问题。

请不要告诉我解决方案是增加任何超时,因为查询非常小(最多 20 条记录),正如我之前所说,当使用相同的技术甚至相同的技术从控制台应用程序运行它时它工作正常我放在下面的代码。

这是给我问题的代码:

MLIBEntities dbMLIB = new MLIBEntities();

var searchResults = (from s in dbMLIB.Sets
                     where s.setmap1.StartsWith(accountNumber)
                     select s);

return searchResults.ToList();

运行searchResults.ToList()时抛出异常;

这是实体类使用的连接字符串。我确定它使用了连接字符串,因为我用语法错误对其进行了修改并且它们被检测到了。

<connectionStrings>
    <add name="MLIBEntities" connectionString="metadata=res://*/Models.MlibDBModel.csdl|res://*/Models.MlibDBModel.ssdl|res://*/Models.MlibDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=HERPADERP;Initial Catalog=MLIB;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=200&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我猜这一定是 MVC Web 应用程序中某处的配置问题,或者我只是缺少 Web.config 文件中的某些内容。你们中有人遇到过这个问题吗?我知道这真的很奇怪。

感谢您的帮助。我真的没有想法。

最后一件事。我运行了 SQL 探查器,似乎查询永远不会到达数据库服务器。关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 200 秒后真的超时了吗?
  • 真的,与 ASP.NET MVC 3 无关。
  • SQL Server 在本地还是在网络上?
  • 您是说某些查询有效,但 searchResults 无效?您是否在控制台应用程序的 web/config 文件中使用了相同的 connectionStrings 部分?您在使用 ADO.NET core 时使用了什么连接字符串?
  • 好的,请求在大约 10 秒后抛出超时。 SQL Server 在网络上,但正如我所说,我启动了探查器跟踪(从我运行应用程序的同一台机器)并且请求似乎永远不会到达服务器。

标签: c# entity-framework-4 timeout


【解决方案1】:

我遇到了同样的问题,后来又出现了一个,与MSSQL无关。为了解决第一个问题(运行查询花费了太长时间),我将command.CommandTimeout 更改为使用更大的数字(默认为 30)。出现的另一个问题是当我使用计划任务运行此应用程序时 - 20 分钟后它会抛出错误

“线程被中止”

查看日志错误后发现应用程序池也有超时,默认值为20分钟。

【讨论】:

【解决方案2】:

这可能显示为超时,但可能只是一个安全问题。

我的第一反应是,您正在使用 Windows 身份验证 (Integrated Security=True) 进行连接,并且该网站正在一个帐户(网络服务?)下运行,该帐户没有该服务器的有效登录名。

我的第二个直觉是 Sql Server 在另一台机器上,并且存在防火墙问题。

第三个直觉是 Sql Server 未配置为接受 TCPIP 上的网络连接。运行 Sql Server 配置管理器并确保它正在侦听。

【讨论】:

  • 但是他可以从 ConsoleApp 连接,所以问题肯定出在其他地方。
  • @Tomas 他从他的用户帐户下的控制台应用程序连接。 ASP.NET 在不同的帐户下运行,所以你错了。
  • 你是完全正确的。我在写评论后意识到这一点。谢谢
【解决方案3】:

感谢大家的帮助。看起来该查询确实返回了大量记录,并且在从 Web 应用程序运行它时导致超时,而鉴于其性质,它并没有在控制台应用程序中发生。

再次感谢您!

【讨论】:

  • 控制台应用程序将在大约同一时间检索相同数量的记录。查询数据库的不是哪个应用程序,而是数据库和/或记录。
  • 你是对的,那里有一些可疑的东西。我优化了查询并解决了问题。谢谢。
【解决方案4】:

我已经在连接字符串中出现 MultipleActiveResultSets=True 超时,请尝试将其关闭以查看是否有问题

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多