复制
这是Dealing with a longer running process in WCF的密切复制品。请考虑将答案发布到那个而不是这个。
原始问题
我正在实现必须在预定时间运行某些后台进程的应用程序的业务层。业务层由几个WCF服务组成,所有这些服务都在同一Web应用程序下运行。
这个想法是定义一组必须在不同时间运行的“任务”(例如,每5分钟,每天23:00等)。这不是很难实现作为Windows服务,但问题是,任务需要访问生活在服务中的数据缓存,因此这个'调度程序'必须在IIS上下文中运行才能访问该数据。
我目前正在做的是在其中一个生成子线程并返回的WCF服务中使用自定义ServiceHostFactory。子线程每隔X分钟休眠并唤醒,以查看是否有计划任务并执行它们。 但我担心IIS在回收应用程序池时或在一些非活动时间之后随机杀死我的线程(例如,任何WCF服务都没有活动,它会监听来自表示层的请求)。无论服务上的活动如何,线程都必须不间断地运行。这真的有可能吗?
我找到an article by someone doing the same thing,但他的解决方案似乎是定期从子线程本身ping服务器。希望有更好的解决方案。
答案 0 :(得分:1)
我在某个时候实现了一个Windows服务,它会定期加载一个网页。这样做的目的是该站点托管Workflow Foundation运行时,我们希望确保在IIS回收应用程序池后重新启动Web应用程序。也许在这种情况下可以使用相同的方法;有一项服务(或Windows中的预定任务;甚至更简单)每x分钟运行一次并加载一个将检查任务的页面。
答案 1 :(得分:1)
是否可以运行Windows服务或在Windows Scheduler中放置应用程序以在特定时间执行WCF中的方法?也许在WCF中使用BackgroundWorker。另一种选择是WCF生成其他应用程序来执行业务逻辑,传递适当的数据或指向内存中的数据(不安全)。