我正在使用基于MVC(ASP.Net + C#)的应用程序。我使用Jquery DataTable来显示记录。现在问题是,对于某些记录,它的工作正常,对于某些记录,它给我一些错误,比如前端的“Timeout expired”。
我正在使用Entity Framework&存储过程以获取记录。对于某些值,它给了我超时错误。如果我直接用这些需要的参数执行这个Sp(其中它给出了Timeout Error),那么它工作正常(但在SQL Server中占用时间大约11秒)。我只是在结束时遇到了Timeout错误。
我收到以下错误。
{“超时已到期。超时时间在完成之前已经过去 操作或服务器没有响应。“} {”等待操作 超时“}
我尝试在web.config中添加
<httpRuntime executionTimeout="180" maxRequestLength="2000000000" />
但没有锻炼。
我的Web.Config如下。
<add name="TestEntities" connectionString="metadata=res://*/Test2.csdl|res://*/Test2.ssdl|res://*/Test2.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=Test2;integrated security=True;multipleactiveresultsets=True;Connection Lifetime=120;Min Pool Size=120;Connection Timeout=300;Max Pool Size=1000;Pooling=true;App=EntityFramework"" providerName="System.Data.EntityClient" />
请帮忙。
由于 -Nimesh
答案 0 :(得分:2)
SQL Server为存储过程创建执行计划,以优化进一步执行的性能(参数嗅探)。当您在SSMS
上执行此存储过程时,它可以正常工作,但是当您尝试从ASP.NET MVC应用程序执行相同的存储过程时,您将面临超时问题。
您可以通过重新创建/更改存储过程 WITH RECOMPILE
选项(在您的参数之后)来解决此问题。我今天遇到了这个问题;改变了我的存储过程 WITH RECOMPILE
选项,它就像一个魅力。有关详情,请参阅 Parameter Sniffing
。
答案 1 :(得分:1)
I have solved issue by increasing CommandTimeout To 120
Db.CommandTimeout = 120;