【问题标题】:Do MVC views have a timeout in which HttpPost operation will not be executed?MVC 视图是否有超时,不会执行 HttpPost 操作?
【发布时间】:2015-08-28 15:16:00
【问题描述】:

我有一个如下相似的表格...

@using (Html.BeginForm())
{
    @* Model elements go here *@
    <input type="submit" value="Save" />
}

以及此视图的以下方法,我们将称之为“测试”

public ActionResult Test()
{
    return View();
}

[HttpPost]
public ActionResult Test(ModelObj m)
{
    try{
        //do save logic with ModelObj entity
    }
    catch(Exception ex){
        //Log error - send e-mail to self and display 'save failed' msg to front end user
    }
    return View(m);
}

此代码在加载页面并立即运行时按预期运行,但其他用户(我自己无法重新创建问题)抱怨等待时间较长(让页面闲置超过 10 分钟),在“保存' 点击,页面进行回发(页面闪烁并重新加载)但数据尚未保存。

我在 try/catch 中添加了错误日志以尝试找出问题,但没有收到任何错误电子邮件,并且用户没有看到 catch 块提供的前端“保存失败”消息。

我只能想象这是一个会话问题 - 但我已经在此页面上消除了我自己对 Session 变量的所有使用,并且想知道 MVC 是否有它自己的 View 超时期限(它只是扔掉所有型号信息)。如果是这样,有没有办法增加这个?我应该寻找其他任何可能性吗?

【问题讨论】:

  • IIS 不控制这个吗?
  • 看起来默认是 110 秒:stackoverflow.com/questions/579523/… 无论如何,我认为这不是您的问题,我认为您的逻辑可能对不同的用户表现不同。也许还有验证问题?
  • 我不确定这是一个会话问题,但不管它是什么应该有一个错误,所以我建议花一点时间来发现这个错误。看看here。本文展示了如何为 Web API 执行此操作,但也适用于 MVC。
  • @Marko 我还认为这可能是一个验证问题(因为它使用了我自己没有设计的数据库)。我在 try catch 周围添加了验证和 Model.IsValid 但最终也没有捕获到任何东西。

标签: asp.net-mvc session-timeout


【解决方案1】:

这听起来对我来说也是一个会话问题。也许您可以尝试将会话超时设置为一个非常小的值(例如 1 分钟)并查看该行为是否在该时间之后自我复制?或者,您可以尝试在页面上重新启动 IIS - 这应该有效地刷新会话。如果这确实是问题所在,您可以随时增加会话状态超时。

如果您不知道,可以在 web.config 中修改会话状态超时值:

<sessionState timeout="30" />

或在特定站点的会话状态下的 IIS 管理器中。

【讨论】:

  • 刚刚尝试将其设置为 timeout="1",但无法重现所描述的问题。在接下来的 30 分钟内,我正在让它静置,以查看它是否会改变它为我重现错误的想法。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
相关资源
最近更新 更多