我们希望将应用程序中的数据与外部服务的数据同步。(例如会计软件。这种同步应该在每晚和客户想要的时候执行。
我知道长时间运行的线程不属于 Web 应用程序,这种同步应该在外部 Windows 服务中执行。但是这种方法的缺点是,部署/维护变得更加困难,因为应用程序也可以安装在客户的网络服务器上。
是否可以仅使用类库项目与我的解决方案完全集成这种同步,该解决方案将在 Application_Start 事件中启动?
我们希望将应用程序中的数据与外部服务的数据同步。(例如会计软件。这种同步应该在每晚和客户想要的时候执行。
我知道长时间运行的线程不属于 Web 应用程序,这种同步应该在外部 Windows 服务中执行。但是这种方法的缺点是,部署/维护变得更加困难,因为应用程序也可以安装在客户的网络服务器上。
是否可以仅使用类库项目与我的解决方案完全集成这种同步,该解决方案将在 Application_Start 事件中启动?
由于您的应用程序托管在 IIS 上,因此它由应用程序池进程维护。如果您为任务创建附加模块,它将在同一进程的上下文中运行。您必须确保此过程在半夜未使用应用程序时仍在工作,以便执行您想要的同步。您可以使用 Quartz.NET 来安排您的同步任务。
但是,我认为更好的主意是从 Windows 服务执行同步。服务应该与应用程序进行通信,例如通过使用数据库来记录其当前活动。它使您可以通过连接到此类数据库来从 Web 监视服务状态。我知道服务会迫使一些额外的管理工作,但它会更加可靠和安全。您还可以从您的 Web 应用程序添加服务启动可能性(如果池进程用户有权访问 Windows 服务)以克服(或至少最小化)与在某些故障后重新启动服务相关的管理工作。
我已经编写了这样的功能,所以只是为了让您全面了解我所说的对此类外部服务的 Web 监控的含义,请查看下面的屏幕。可以用 ajax 支持编写来实现更多的响应性(池化机制),这将方便最终用户。