Windows工作流基础在本地托管的和网络API(Windows Workflow Foundati

2019-09-29 23:37发布

我希望使用Windows Workflow Foundation的4.5和通过Web API触发工作流程。 什么是我的托管选项现在MS已经结束AppFabric的支持? 应我甚至使用Windows Workflow Foundation的,或者我应该寻找到一个第三方的解决方案?

这是内部部署的,我没有用天蓝色的能力。 我已经做了一些工作流程,好像WWF并不难使用,但目前还不清楚如何承载它。 我可以托管而不AppFabric的网络API项目里面?

我最关心的是能够恢复的工作流程,如果IIS应用程序池使用WorkflowApplication或服务器崩溃回收。 我没有使用WCF我打算使用Web API的内部WorkflowApplication。

任何人都可以点我在执行该AppFabric中负责对自定义功能的正确方向? 恢复,日志记录等。

从MS:使用IIS与AppFabric的是工作流的优选的宿主。 使用AppFabric的工作流程主机应用程序是Windows激活服务,这比单独IIS消除了对HTTP的依赖

IIS 7.0定期回收应用程序池因各种原因。 当一个应用程序池被回收,IIS停止接受邮件的老游泳池和实例化一个新的应用程序池,以接受新的请求。 如果一个工作流继续发送响应工作后,IIS 7.0将不会注意到正在开展的工作,并可以回收托管应用程序池。 如果发生这种情况,工作流将中止,并跟踪服务将记录1004 - WorkflowInstanceAborted消息与空原因字段。

如果使用的持久性,主机必须明确地重新从最后一个持久性点中止实例。

如果使用的AppFabric,工作流管理服务最终将恢复从上次成功的持久点的工作流程,如果使用的持久性。 如果没有持久性时,和所述工作流执行请求/响应图案之外的操作,当工作流中止数据都将丢失。

Answer 1:

一个托管的策略是让你的Web API方法简单地把消息转换成队列(MSMQ像兔子或MQ),并且有一个后端Windows服务的实际托管的工作流实例。 后端服务将持续读取队列(S)和旋转起来,你需要正确的工作流程。

这样,你就不会遇到IIS应用程序池回收事件,可以终止流程。

如果你需要有一个Web API方法等待工作流程完成,你可以有它等待“相关信息”,以到达队列发出信号,表明操作完成。 或者你可以在WF实例结果存储在一个数据库表。

其实,我建议不要使用App面料,只需滚动您自己的托管服务,为更好的灵活性。 加上其相对简单的实现一个与你期望的行为。

这里有一个图,我希望这将帮助在您的设计或给出出主意:



文章来源: Windows Workflow Foundation On-Premise Hosting and Web Api