3

这个问题有关

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

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

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

4

1 回答 1

8

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

那么如何从客户端获取消息到正确的 WorkflowServiceHost 呢?WCF 路由服务是您的朋友。他们使用中间 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 版本。

查看这些截屏视频,了解有关 WCF 路由服务的更多信息。

于 2010-03-14T09:14:25.583 回答