0

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

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

我希望客户端调用 Web 服务上的操作并创建一个新任务或线程。客户端能够调用 ListRunningTasks(); 并让网络服务返回一个任务列表。如果任务花费太长时间,客户端应该能够强制终止任务,例如 KillTask​​(int taskID); 或者其他的东西。我以前做过一些线程,但不是在 WCF 内部或没有状态的服务中。这可能吗?如果是这样,人们将如何实施这样的事情?任何阅读、链接或建议都会很棒。

谢谢,迈克。

4

2 回答 2

0

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

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

于 2009-12-23T01:21:44.227 回答
0

一种可能的解决方案:

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

  • 构建一个自定义组件来管理这些队列,例如,您甚至可能想要持久化它们的功能,在您重新启动服务时恢复工作等。

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

  • 实现 WCF 服务以使您的队列管理器可用于外部系统。

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

于 2009-12-23T01:22:00.307 回答