我正在创建WCF WorkflowService,客户端正在对服务进行异步调用。工作流程运行很长时间,一旦客户端断开连接(即关闭发出请求的应用程序),工作流程就会继续并且不会停止。这是如何运作的?一旦cleint断开连接,服务实例不会被破坏,工作流程应该停止吗?
为什么它默认表现为“火与忘”,即单向?
编辑:嗯,我想,一旦客户端断开连接,服务实例就会被破坏,工作流程就会中止
答案 0 :(得分:2)
工作流引擎模拟长时间运行的异步进程。这样的过程可以跨越第二,几小时,几周甚至几年,并且可能涉及一个或多个参与者。因此,要求连接保持开放是不合理和不合适的。
Windows Workflow Service将其状态保存到某个数据存储(通常是数据库),因此如果该工作流中没有任何操作达到指定的时间,则可以将其保存到数据库并从内存中卸载。将来,当有人调用与该工作流实例相关的WCF操作之一时,它将从数据库中恢复并继续执行,就像它始终在内存中加载一样。这允许在任何单个时间点存在大量工作流实例,其中只有一小部分实际占用计算机资源。
耐久性也是工作流服务的重要特征。如果有一个工作流已经持续了很长时间,那么你想要的最后一件事就是它的所有状态和数据都会丢失,如果可能的话,你需要重新开始它。这就是为什么工作流的状态信息不依赖于像网络连接那样脆弱的东西。