在 MVC 返回操作后运行代码 ASP.Net 风险

本文关键字:代码 ASP Net 风险 运行 MVC 返回 操作 | 更新日期: 2023-09-27 18:32:26

我在共享主机上运行MVC 3应用程序,并且有一些页面需要大量处理,不应该让用户等待。(示例:发送几百封带有附件的邮件,在数据库中创建几千条记录。

现在我不是在问如何实现这一目标,因为我知道怎么做,我想知道的是。如果我的应用程序正在执行操作,是否有停止的风险,例如...60秒?

如果是这样,您可以做些什么来防止它(知道应用程序无法在完全信任环境中运行)?

在 MVC 返回操作后运行代码 ASP.Net 风险

我为此使用了 Task,类似于

Task.Factory.StartNew(() => this.SendRequestApprovedNotification(requestId, 
    userName, 
    comments));

遇到的一个问题是我天真地将请求对象传递给任务。不要这样做,而是复制出所需的位并将其向下传递,因为当您可以使用请求对象时,管道可能已经释放了它。

由于您使用的是共享主机,因此您可能需要查看 HostingEnvironment.IncreaseBusyCount 和 ReductionBusyCount。

您可能还想看看 HostingEnvironment.RegisterObject,这将使您有机会在应用程序停止之前取消正在发生的任何操作。

话虽如此,我还没有尝试过这些,它们可能不是特别可靠。这篇文章非常相关,为什么在网站内这样做不是一个好主意,但我知道你在这方面被困住了。

您可以从 web.config 控制请求执行的持续时间:

  <location path="Controller/ProcessFile">
    <system.web>
      <httpRuntime executionTimeout="900" />
    </system.web>
  </location>

执行超时 - 允许的时间(以秒为单位)

但是,我在专用服务器上使用它,而不是共享主机。