【问题标题】:Windows Workflow Foundation On-Premise Hosting and Web ApiWindows Workflow Foundation 本地托管和 Web Api
【发布时间】:2017-12-20 13:35:03
【问题描述】:

我想使用 Windows Workflow Foundation 4.5 并通过 web api 触发工作流。既然 MS 将终止 AppFabric 支持,我有哪些托管选项?我什至应该使用 Windows Workflow Foundation 还是应该研究第 3 方解决方案?

这是内部部署,我无法使用 azure。我已经完成了一些工作流程,似乎 WWF 不难使用,但不清楚如何托管它。我可以在没有 AppFabric 的情况下在 Web api 项目中托管吗?

如果 IIS 应用程序池使用 WorkflowApplication 回收或服务器崩溃,我主要关心的是能否恢复工作流。我没有使用 WCF 我计划在 web api 中使用 WorkflowApplication。

谁能指出我在实现 AppFabric 负责的自定义功能方面的正确方向?恢复、记录等。

来自 MS: 将 IIS 与 AppFabric 结合使用是工作流的首选主机。使用 AppFabric 的工作流的宿主应用程序是 Windows 激活服务,它消除了对 HTTP over IIS 的依赖

IIS 7.0 出于各种原因定期回收应用程序池。当应用程序池被回收时,IIS 停止接受旧池的消息,并实例化一个新的应用程序池以接受新的请求。如果工作流在发送响应后继续工作,IIS 7.0 将不会意识到正在完成的工作,并且可能会回收托管应用程序池。如果发生这种情况,工作流将中止,并且跟踪服务将记录一个 1004 - WorkflowInstanceAborted 消息,其中包含一个空的原因字段。

如果使用持久性,主机必须从最后一个持久性点显式重新启动中止的实例。

如果使用 AppFabric,如果使用了持久性,工作流管理服务最终将从最后一个成功的持久性点恢复工作流。如果不使用持久性,并且工作流执行请求/响应模式之外的操作,则工作流中止时数据将丢失。

【问题讨论】:

  • 您不一定需要使用AppFabric,只要您在数据库中实现自己的工作流状态持久化解决方案,例如SqlServer。
  • 这就是我打算做的,但不知道从哪里开始。你有样品吗?

标签: workflow-foundation appfabric workflow-foundation-4.5


【解决方案1】:

一种托管策略是让您的 Web API 方法简单地将消息放入队列(如 MSMQ 或 Rabbit MQ),并使用后端 Windows 服务来实际托管工作流实例。后端服务会持续读取队列并启动您需要的正确工作流程。

这样您就不会遇到可能终止工作流的 IIS 应用程序池回收事件。

如果您需要让 Web API 方法等待工作流完成,您可以让它等待“关联消息”到达队列以发出操作完成的信号。或者您可以将 WF 实例结果存储在数据库表中。

我实际上建议不要使用 App Fabric,而只是滚动您自己的托管服务以获得更好的灵活性。加上它相对简单地实现一个你想要的行为。

这是一个图表,希望对您的设计有所帮助或提供想法:

【讨论】:

  • 好的,谢谢。实施工作流程如此复杂,这有点压倒性和不真实。我没有太多时间来实现一些我应该能够投入到项目中并使用的东西。在这一点上,我将坚持对所有逻辑进行编码,直到我可以测试一些 3rd 方解决方案,而不是使用 Windows 工作流,如果我必须这样做的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多