我正在使用MVC3、.NET框架4.0和Entity Framework开发ASP.NET网站。当我运行应用程序并对SQL Server 2005数据库执行简单的查询时,会出现以下错误:
"A System.Data.SqlClient.SqlException was thrown: "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."
问题在于,我尝试登录并从管理工具执行相同的查询,它可以正常工作。我使用.NET框架4.0和实体框架开发了一个小型控制台应用程序,执行完全相同的查询,并返回所需的信息。我甚至从Entity Framework切换到ADO.NET类(SqlConnection和SqlCommand),当从SqlCommand实例执行选择时,我获得完全相同的错误。
当我使用实体框架创建模型时,我能够通过向导连接到数据库,并且一切正常。我没有遇到任何问题并成功创建了所有类。
请不要告诉我解决方案是增加任何超时,因为查询非常小(最多20条记录),而且就像我之前说过的,当我从使用相同技术(甚至是放置在下面的相同代码)的控制台应用程序运行时,它可以正常工作。
这是给我带来问题的代码:
"A System.Data.SqlClient.SqlException was thrown: "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."
问题在于,我尝试登录并从管理工具执行相同的查询,它可以正常工作。我使用.NET框架4.0和实体框架开发了一个小型控制台应用程序,执行完全相同的查询,并返回所需的信息。我甚至从Entity Framework切换到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="Data Source=HERPADERP;Initial Catalog=MLIB;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=200"" providerName="System.Data.EntityClient" />
</connectionStrings>
我猜想这一定是MVC Web应用程序中的配置问题,或者是我在Web.config文件中遗漏了某些东西。你们有没有遇到过这个问题?我知道这真的很奇怪。
谢谢你们的帮助。我已经没有任何想法了。
最后,我运行了SQL分析器,似乎查询从未到达数据库服务器。你们有什么想法为什么会发生这种情况吗?