0

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

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

如果是这样,你能做些什么来防止它(知道应用程序不能完全信任地运行)?

4

3 回答 3

1

由于您使用的是共享主机,您可能想查看HostingEnvironment.IncreaseBusyCountDecreaseBusyCount

您可能还想看看HostingEnvironment.RegisterObject,它可以让您有机会在应用程序停止之前取消正在发生的任何事情。

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

于 2012-04-25T21:33:42.127 回答
1

我为此使用了Task,例如

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

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

于 2012-04-25T21:37:24.677 回答
0

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

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

executionTimeout - 允许的时间(以秒为单位)

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

于 2012-04-25T21:22:33.403 回答