ASP.NET同步长进程w / Requirements

时间:2014-09-24 16:45:31

标签: asp.net long-running-processes background-task

我正在使用电子商务平台,我的任务是与某些远程会计软件同步。该任务需要同步订单,产品,库存等。在同步大量数据的情况下,该过程可能需要一段时间。所以,我不认为asp.net应用程序是处理这个问题的最佳场所。所以,要求是:

  1. 为了能够安排此过程一夜之间运行
  2. 为了能够手动触发此过程并将一些变量(例如要导出的订单号)传递给它。
  3. 手动触发时可能会返回状态信息。
  4. 必须使用.net 3.5
  5. 问题:无法使用Windows服务,因为该网站是在共享服务上远程托管的,并且主机不允许提供服务。

    想法:我很难找到最适合处理这个符合所有要求的外部asp.net的方法,但我确实可以访问他们的FTP并且可能想到一个托管网络的控制台应用程序 - 服务可能会起作用,我可以将Quartz调度程序放在全局文件中以从站点启动服务。

    无论如何,如果你有哪些方法适合你,请提供一些想法和经验。

1 个答案:

答案 0 :(得分:2)

  

无法使用Windows服务,因为该网站是在共享服务上远程托管的,并且主机不允许提供服务。

这可能是个问题。此托管服务是否提供任何其他类型的计划功能?如果没有,那么您可能需要考虑更改您的托管服务。

您更正确的是,ASP.NET 不是您用于安排任务的工具 。 Web应用程序是一个请求/响应系统(并且非常受托管进程的影响,IIS通常用于ASP.NET)。所以你需要一些方法来安排任务定期执行。 Windows服务,Windows任务计划程序或其他一些任务计划工具。

至于能够手动调用进程的要求,这是将逻辑调用与逻辑本身分开的简单问题。请注意以下组件:

  • 执行逻辑的模块,不绑定到任何UI或任何调用它的方式。基本上是一个类库项目(或一部分)。
  • 引用类库并调用逻辑的Windows服务或控制台应用程序。
  • 引用类库并调用逻辑的Web应用程序。

一旦您完成了如何安排控制台应用程序的安排,只需安排它并完成所有设置。如果该过程返回一些信息,则控制台应用程序还可以执行任何必要的通知,以通知人们该信息。

然后,Web应用程序也可以在某处手动调用该进程。由于过程"可能需要一段时间"那么你当然不希望界面等待它完成。这可能导致超时并使系统处于未知状态。相反,您希望将UI返回给用户,指示该进程已启动(或已排队),并且在完成时将通知结果。这有两个选择...

  • 您可以使用a BackgroundWorker来实际调用该过程。该过程完成后,向调用它的用户发送通知。
  • 您可以将记录写入数据库表中以排队"队列"该过程并具有类似于Windows服务或计划的控制台应用程序(与上面相同的方案),它定期轮询该表以查找排队任务,执行任务并发送通知。 (当然,在此过程中更新表中的状态,以便它不会执行两次。)

无论哪种方式都有利弊,这取决于你是如何进行的。最终,你会在这里看两件主要的事情:

  1. 将逻辑本身与逻辑的调度/调用分开。
  2. 利用调度系统来安排任务。 (如果您的托管服务提供商没有,请找一个。)