我想使用WCF编写一些Web服务。
我想在我的网络服务中有一个“线程池”。 例如,我需要操作近6GB的数据。
我希望客户端在webservice上调用一个操作并创建一个新任务或线程。客户端能够调用ListRunningTasks();并让webservice返回任务列表。如果任务耗时太长,客户应该能够强行杀死任务。 KillTask(int taskID);或者其他的东西。我以前做过一些线程,但不是在WCF内部或没有状态的服务。这可能吗?如果是这样,那么如何实现这样的事情呢?任何阅读,链接或建议都会很棒。
谢谢,迈克。
答案 0 :(得分:0)
您应该考虑使用Windows Workflow Foundation来创建此类服务。状态机工作流可以作为服务公开,以便在调用方法A时,它将启动工作流(任务),之后可以调用方法来停止,暂停或查询正在运行的任务。 WF将处理状态转换,防止非法状态更改,并确保只在必要时启动新任务。
请注意,WF将以几乎透明的方式为您处理线程问题。
答案 1 :(得分:0)
一种可能的解决方案:
为您的未完成任务实施显式队列,考虑到他们需要很长时间(写下20-30分钟)。
构建自定义组件来管理这些队列,例如您甚至可能希望能够持久保存它们,在重新启动服务时恢复工作等。
明确创建了从这些队列中提取工作的工作线程。
实施WCF服务,使您的队列管理器可供外部系统使用。
线程池更适合处理大量短期运行任务。