0

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

  1. 为了能够安排此过程在一夜之间运行
  2. 为了能够手动启动此过程并将一些变量(如要导出的订单号)传递给它。
  3. 手动触发时可能会取回状态信息。
  4. 必须在 .net 3.5 上工作

问题:无法使用 Windows 服务,因为该站点远程托管在共享服务上,并且主机不允许服务。

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

无论如何,如果您知道哪些方法对您有效,请提供一些想法和经验。

4

1 回答 1

2

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

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

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

至于能够手动调用流程的要求,就是把逻辑的调用和逻辑本身分开的简单问题。想象以下组件:

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

一旦你弄清楚如何安排控制台应用程序,只需安排它,一切就准备好了。如果该过程返回一些信息,那么控制台应用程序还可以执行任何必要的通知来通知人们该信息。

然后,Web 应用程序也可以在某个地方有一个接口来手动调用该过程。由于该过程“可能需要一段时间”,因此您当然不希望界面等待它完成。这可能会导致超时并使系统处于未知状态。相反,您希望将 UI 返回给用户,指示该过程已开始(或已排队),并且在完成时将通知他们结果。有几种选择...

  • 您可以使用aBackgroundWorker来实际调用该过程。该过程完成后,向调用它的用户发送通知。
  • 您可以将记录写入数据库表以“排队”进程,并拥有类似于 Windows 服务或计划的控制台应用程序(与上述相同的场景)的东西,它定期轮询该表以查找排队的任务、执行任务并发送通知。(当然会在此过程中更新表中的状态,因此它不会执行两次。)

无论哪种方式都有利弊,这完全取决于您要如何进行。最终,您将在这里看到两个主要内容:

  1. 将逻辑本身与逻辑的调度/调用分开。
  2. 利用调度系统来调度任务。(如果您的托管服务提供商没有,请找到有的。)
于 2014-09-24T16:59:14.927 回答