iis - 使用 WorkflowServiceHost 的 WF4 工作流版本控制

标签 iis workflow-foundation workflow-foundation-4 iis-7.5 xamlx

this question 相关.

我了解如何使用 WorkflowApplication 实现工作流版本控制.如果您保留旧版本工作流的原始 XAML 定义,则可以使用正确的 WorkflowApplication 构造函数加载它们。

您如何确保WorkflowServiceHost当您想在 IIS 中托管工作流时使用正确的工作流定义?

有一个 WorkflowServiceHost 构造函数可用于加载工作流定义,但是当您通过 XAMLX 文件在 IIS 中托管时,您不要自己调用 WorkflowServiceHost ,这是由 IIS 以某种方式处理的。那么如何确保为正确版本的工作流加载正确的工作流定义?

最佳答案

使用 WorkflowServiceHost 的方法与使用 WorkflowApplication 的方法并不完全不同。保留各种 XAML(X) 版本的基础知识仍然适用。因此,对于 WorkflowServiceHost,您需要创建多个 WorkflowServiceHost,每个托管不同版本的 XAMLX。每个都有不同的端点。所以基本上一个 en 端点都解决了工作流服务及其版本。

那么如何从客户端获取消息到正确的WorkflowServiceHost? WCF 路由服务是您的 friend 。他们使用中间 WCF 路由服务,而不是让客户端直接与您的 WorkflowServiceHost 通信。这反过来检查消息并将它们路由到托管相应 XAMLX 文件的 WorkflowServiceHost。那它是怎么知道的。有几种方法可以做到这一点。例如,使用消息相关标识符进行数据库查找,对新工作流的请求总是转到最后一个版本。最简单的方法是让工作流服务返回一个版本号作为初始请求的一部分,并将其作为每个后续请求的必需部分。这样,WCF 路由服务就可以仅使用发送的消息数据完成所有工作。

这方面的一个例子是:

  1. 客户端使用订单 ID 7 发送消息开始新的工作流程,并收到版本 3。客户端应用程序使用 URL httl://localhost/MyWorkflow.xaml,路由服务转发到最后一个版本的 httl://localhost/MyWorkflow.v3.xamlx。
  2. 它发送到工作流的下一条消息包含 orderid 和版本 3。客户端应用程序使用 URL httl://localhost/MyWorkflow.xaml,路由服务转发到 httl://localhost/MyWorkflow.v3.xamlx,即指定的版本。
  3. 客户端应用想要向旧的工作流程发送消息。它使用 orderid 2 和版本 1(在此工作流启动时回复)。客户端应用程序使用 URL httl://localhost/MyWorkflow.xaml 并且路由服务转发到 httl://localhost/MyWorkflow.v1.xamlx,这是 incicated 的版本。

检查 these有关 WCF 路由服务的更多信息的截屏视频。

关于iis - 使用 WorkflowServiceHost 的 WF4 工作流版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433670/

相关文章:

silverlight-4.0 - WF4.0 与 Silverlight 4.0 集成

asp.net-mvc - F# Asp.Net CodeDom ProviderOptions 问题

asp.net-mvc - 使用 AngularJS SPA 的服务器端路由

工作流程无代码创作

c# - 工作流/工作流服务组合?如何在 'normal' 工作流上使用 Receive 事件?

.net - 是否可以动态创建工作流程(在 Workflow-foundation -4 中)?

asp.net - 将 ASP.NET 5 (vNext) 站点部署到 IIS 8

powershell - 如何在PowerShell中比较两个查询

c# - 使用 wshttpbinding 和用户名身份验证保护服务时,WCF 服务显示异常

c# - 如何获取事件中的工作流实例?