WCF和具有线程的任务

时间:2009-12-23 00:46:24

标签: web-services multithreading soa scheduled-tasks pool

我想使用WCF编写一些Web服务。

我想在我的网络服务中有一个“线程池”。 例如,我需要操作近6GB的数据。

我希望客户端在webservice上调用一个操作并创建一个新任务或线程。客户端能够调用ListRunningTasks();并让webservice返回任务列表。如果任务耗时太长,客户应该能够强行杀死任务。 KillTask​​(int taskID);或者其他的东西。我以前做过一些线程,但不是在WCF内部或没有状态的服务。这可能吗?如果是这样,那么如何实现这样的事情呢?任何阅读,链接或建议都会很棒。

谢谢,迈克。

2 个答案:

答案 0 :(得分:0)

您应该考虑使用Windows Workflow Foundation来创建此类服务。状态机工作流可以作为服务公开,以便在调用方法A时,它将启动工作流(任务),之后可以调用方法来停止,暂停或查询正在运行的任务。 WF将处理状态转换,防止非法状态更改,并确保只在必要时启动新任务。

请注意,WF将以几乎透明的方式为您处理线程问题。

答案 1 :(得分:0)

一种可能的解决方案:

  • 为您的未完成任务实施显式队列,考虑到他们需要很长时间(写下20-30分钟)。

  • 构建自定义组件来管理这些队列,例如您甚至可能希望能够持久保存它们,在重新启动服务时恢复工作等。

  • 明确创建了从这些队列中提取工作的工作线程。

  • 实施WCF服务,使您的队列管理器可供外部系统使用。

线程池更适合处理大量短期运行任务。