运行 每天特定时间在 Web 服务上的预定进程
Run a scheduled process every day at a certain time on web service
我一直在构建 Web 服务以在我公司的 SalesForce 和 Zendesk 之间同步数据。在这样做的过程中,我构建了多项优化以大幅减少执行时间,例如缓存从每个服务检索的一些较大的数据集。
但是,这是有代价的。缓存数据时,最多可能需要 3-5 分钟才能通过 SalesForce 和 Zendesk 的 API 下载所有内容。
为了解决这个问题,我正在考虑让后台工作人员每天午夜自动缓存所有需要的数据。但是,我不确定这样做的最佳方法是什么。
构建一个 class 是否足够,它只有一个工作线程,每隔几分钟检查一次是否在午夜之后,并在从 Global.asax 启动时激活它。或者是否已经存在某种调度程序?
编辑
使用像这样的东西之间似乎有一些区别:
FluentScheduler or Quartz.net 将所有内容都包含在我的应用程序中。
与使用 windows 任务调度器之类的东西并编写辅助应用程序来调用我的应用程序的函数来执行此操作相比。似乎使用第三方库会更 简单 ,但是使用 Windows Task Scheduler 有什么固有的好处吗?
添加一个知道如何操作的端点,并使用 windows 任务调度程序调用新的缓存端点。
我认为您想将数据缓存逻辑添加到 "console application" 类型的项目中。您将能够将其部署到您的服务器,并使用 windows "Task Scheduler" 运行 将其作为计划任务。如果您在出现堆栈溢出问题之前没有使用过此项目类型或计划任务,应该会有所帮助 here, here, and here。如果需要,您可以添加命令行参数,并且您应该查看添加互斥锁,以便您的代码的一个实例一次 运行。
我一直在构建 Web 服务以在我公司的 SalesForce 和 Zendesk 之间同步数据。在这样做的过程中,我构建了多项优化以大幅减少执行时间,例如缓存从每个服务检索的一些较大的数据集。
但是,这是有代价的。缓存数据时,最多可能需要 3-5 分钟才能通过 SalesForce 和 Zendesk 的 API 下载所有内容。
为了解决这个问题,我正在考虑让后台工作人员每天午夜自动缓存所有需要的数据。但是,我不确定这样做的最佳方法是什么。
构建一个 class 是否足够,它只有一个工作线程,每隔几分钟检查一次是否在午夜之后,并在从 Global.asax 启动时激活它。或者是否已经存在某种调度程序?
编辑
使用像这样的东西之间似乎有一些区别:
FluentScheduler or Quartz.net 将所有内容都包含在我的应用程序中。
与使用 windows 任务调度器之类的东西并编写辅助应用程序来调用我的应用程序的函数来执行此操作相比。似乎使用第三方库会更 简单 ,但是使用 Windows Task Scheduler 有什么固有的好处吗?
添加一个知道如何操作的端点,并使用 windows 任务调度程序调用新的缓存端点。
我认为您想将数据缓存逻辑添加到 "console application" 类型的项目中。您将能够将其部署到您的服务器,并使用 windows "Task Scheduler" 运行 将其作为计划任务。如果您在出现堆栈溢出问题之前没有使用过此项目类型或计划任务,应该会有所帮助 here, here, and here。如果需要,您可以添加命令行参数,并且您应该查看添加互斥锁,以便您的代码的一个实例一次 运行。