【问题标题】:MVC: Timeout issueMVC:超时问题
【发布时间】:2016-03-07 08:49:09
【问题描述】:

我正在尝试在 MVC 中提取 SQL 服务器视图的结果。视图本身相对简单,并且将几个表联合在一起 - 运行时大约需要 2 秒才能返回其行。我已将视图添加到 MVC 中的模型中。

在我的控制器中,我有以下代码,旨在以 JSON 格式返回 SQL 视图中的值:-

public JsonResult GetActivity(string LocalIdentifier) 
{
    return Json(db.Activities.Where(r => r.LocalIdentifier== LocalIdentifier).ToList(), JsonRequestBehavior.AllowGet);
}

当我尝试运行它时,提供一个有效的 LocalIdentifier 有一段时间没有任何反应,然后我在 Visual Studio 中得到一个异常(未在用户代码中处理)。作为参考,这通常只会从 SQL 返回 30 到 50 行数据。

查看内部异常我得到这个错误:-

“超时。在操作完成之前超时时间已过或服务器没有响应。”

我在我的应用程序的其他地方做了类似的事情,它工作正常 - 我看不出我在 MVC 中的代码有什么问题。我还有什么可以帮助诊断和解决此问题的方法吗?

更新

有趣的是,我刚刚更改了代码以仅提取一行(只是为了看看会发生什么 - 见下文)并且它会立即运行......这可能是 ToList() 的问题吗?是否有另一种方法可以实现我想要做的事情?

public JsonResult GetActivity(string LocalIdentifier) 
{
    return Json(db.Activities.First(r => r.LocalIdentifier== LocalIdentifier), JsonRequestBehavior.AllowGet);
}

【问题讨论】:

  • 你的数据库服务器有响应吗?
  • 是的...db 已启动并运行并与我的应用程序的其余部分一起工作。
  • 既然返回的是json格式,请问是否设置了服务器授权?可能是函数的调用者无权调用该函数
  • 可能不相关....但是您使用的是 azure-sql server paas 吗?我们有一个场景,paas 和联合操作存在问题......
  • 不,我们没有使用 azure。

标签: c# sql-server asp.net-mvc exception


【解决方案1】:

您应该尝试直接在 sql server 上运行生成的查询。我希望查询运行超过 30 秒,导致超时。默认超时值为 30 秒,因此您看到的行为是预期的。

两种处理方式:

  • 加快查询速度(也许您缺少索引?)
  • 更改默认超时(但我认为这不是首选)

【讨论】:

  • 如果应用程序和数据库驻留在不同的服务器上我认为是可能的 :) 因为如果他在 sql 端查询它只需要 2 秒即可完成
  • 查询实际上需要 2 秒才能运行,正如我原来的问题中提到的那样......我之前已经增加了超时只是为了看看会发生什么但没有改变(除了更长的等待直到我得到错误)
  • @MatRichardson 您的LocalIdentifier 在数据库端可以为空吗?我已经读过将不可为空的标量与可空的比较需要时间来完成
  • 不,该值不可为空。
【解决方案2】:

这取决于db.Activities 的定义方式。如果它具有其他实体的属性(意味着数据库中的其他表),那么这些也可以由 EF 加载,即使您没有如此明确地指定,因为 JSON 正在序列化每个对象 它的属性。一半或更多的数据库最终可能会被加载,即使是这样的简单语句。

This SO question 有几个答案可以帮助您更好地了解幕后发生的事情,然后修复它。

【讨论】:

    【解决方案3】:
    1. 启用profiling并查看里面的查询
    2. 在 SSMS 中启动此查询并构建 query execution plan
    3. 分析计划并对数据库进行更新 - 更改结构、构建索引、更改查询

    如果查询在 DB 中运行良好,那么您的 ORM 端部分似乎有问题,您应该在那里搜索问题

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 2011-04-24
      • 2011-06-19
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多