2009-07-18 51 views
2

重复
这是一个密切重复的Dealing with a longer running process in WCF。请考虑发布您的答案,而不是这个。ASP.NET + WCF下的长时间运行线程程序

原始的问题
我执行必须在预定的时间运行一些后台进程的应用程序的业务层。业务层由几个WCF服务组成,它们都运行在同一个Web应用程序下。

这个想法是定义一组必须在不同时间运行(如每5分钟,每天23:00等)的一组'任务'。这并不难作为一个Windows服务来实现,但问题是,这些任务需要访问服务中的数据缓存,所以这个“调度程序”必须在IIS上下文中运行才能访问这些数据。

我目前正在做的是在其中一个WCF服务中使用自定义的ServiceHostFactory,它产生一个子线程并返回。子线程每隔X分钟休眠并唤醒一次,以查看是否有计划任务并执行它们。 但是我担心IIS会在回收应用程序池或一段非活动时间后(例如,在任何监听来自表示层的请求的WCF服务上没有活动)而随机杀死我的线程。无论服务的活动如何,线程都必须不间断地运行。这真的有可能吗?

我发现an article by someone doing the same thing,但他的解决方案似乎是定期从子线程本身ping服务器。希望有更好的解决方案。

+0

这是一个非常接近的副本http://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcf。请看看它,看看你是否同意我的看法。 – 2009-07-18 03:48:33

回答

1

我在某个时候实现了一个Windows服务,可以定期加载网页。其目的在于该网站承载了Workflow Foundation运行时,并且我们希望确保在IIS回收应用程序池之后Web应用程序已恢复运行。也许在这种情况下可以使用相同的方法;有一项服务(或Windows中的Scheduled Task;甚至更简单),每x分钟运行一次并加载一个页面来检查任务。

1

是否有可能运行Windows服务或将应用程序放置在Windows调度程序中以在特定时间执行WCF中的方法?也许在WCF中使用BackgroundWorker。另一种选择是WCF产生其他应用程序来执行业务逻辑,传递适当的数据或指向内存中数据的指针(不安全)。