MVC:超时问题
我试图提取MVC中的SQL服务器视图的结果。视图本身相对简单,UNION将几个表联系在一起 - 运行时大约需要2秒才能返回其行。我在MVC中将视图添加到我的模型中。MVC:超时问题
在我的控制,我有以下的代码,其目的是JSON格式返回从SQL视图中的值: -
public JsonResult GetActivity(string LocalIdentifier)
{
return Json(db.Activities.Where(r => r.LocalIdentifier== LocalIdentifier).ToList(), JsonRequestBehavior.AllowGet);
}
当我尝试运行此,提供有效的LocalIdentifier
什么也没发生的一段时间,然后在Visual Studio中出现异常(在用户代码中未处理)。作为参考,这通常只会返回30到50行SQL数据。
望着内部异常我得到这个错误: -
“超时时间已超时时间已过之前,操作完成或服务器没有响应。”
我在我的应用程序的其他地方做过类似的事情,它工作正常 - 我看不出MVC中的代码有什么问题。有什么我可以看看帮助诊断和解决这个问题?
更新
有趣的是,我只是改变了代码只提取一行(只是为了看看会发生什么 - 见下文),它运行瞬间......难道这是用ToList问题() ??有没有另外一种方法可以实现我想要做的事情?
public JsonResult GetActivity(string LocalIdentifier)
{
return Json(db.Activities.First(r => r.LocalIdentifier== LocalIdentifier), JsonRequestBehavior.AllowGet);
}
你应该尝试直接在sql server上运行结果查询。我预计查询会运行超过30秒,导致超时。默认超时值是30秒,因此您所看到的行为是预期的。
2种方式来对付它:
- 加快查询(也许你错过了一个指数?)
- 改变默认的超时(但这不是在我看来更好的选择)
这取决于如何定义db.Activities
。如果它具有其他实体的属性(即数据库中的其他表),那么即使您没有明确指定,也可以通过EF加载这些属性,因为JSON会序列化其每个对象和的属性。你的数据库的一半或更多可能最终被加载,即使从这样一个简单的语句。
This SO question有几个答案,可以帮助你更好地了解幕后发生的事情,然后修复它。
- 启用profiling和查看查询里面
- 启动在SSMS此查询,并建立了query execution plan
- 分析计划,并更新到数据库 - 改变结构,建立索引,更改查询
如果查询在数据库中运行良好,那么您的ORM部分看起来有点问题,您应该搜索那里的问题
是您的数据库服务器r esponding? – Sherlock
是的...... db已启动并正在运行,并与我的其他应用程序一起工作。 –
因为它返回一个json格式,你是否设置了服务器授权?它可能是函数的调用者不授权调用该函数 – Sherlock