【问题标题】:Long-running thread process under ASP.NET + WCFASP.NET + WCF下长时间运行的线程进程
【发布时间】:2009-07-18 03:02:21
【问题描述】:

重复
这是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 服务器。希望有更好的解决方案。

【问题讨论】:

标签: asp.net wcf multithreading iis-7


【解决方案1】:

我在某个时候实现了一个 Windows 服务,它会定期加载一个网页。这样做的目的是该站点托管一个 Workflow Foundation 运行时,并且我们希望确保在 IIS 回收应用程序池之后恢复 Web 应用程序。在这种情况下,也许可以使用相同的方法;让服务(或 Windows 中的计划任务;更简单)每 x 分钟运行一次,并加载一个检查任务的页面。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多