使用 WorkflowServiceHost 的方法与使用 WorkflowApplication 的方法并不完全不同。保留各种 XAML(X) 版本的基础知识仍然适用。因此,对于 WorkflowServiceHost,您需要创建多个 WorkflowServiceHost,每个托管不同版本的 XAMLX。每个都有不同的端点。所以基本上一个 en 端点都解决了工作流服务及其版本。
那么如何从客户端获取消息到正确的 WorkflowServiceHost 呢?WCF 路由服务是您的朋友。他们使用中间 WCF 路由服务,而不是让客户端直接与您的 WorkflowServiceHost 通信。这反过来检查消息并将它们路由到托管相应 XAMLX 文件的 WorkflowServiceHost。那它是怎么知道的。有几种方法可以做到这一点。例如,使用消息相关标识符进行数据库查找,对新工作流的请求总是转到最后一个版本。最简单的方法是让工作流服务返回一个版本号作为初始请求的一部分,并将其作为每个后续请求的必需部分。这样,WCF 路由服务就可以仅使用发送的消息数据完成所有工作。
这方面的一个例子是:
- 客户端使用订单 ID 7 发送消息开始新的工作流程,并收到版本 3。客户端应用程序使用 URL httl://localhost/MyWorkflow.xaml 并且路由服务转发到最后一个版本的 httl://localhost/MyWorkflow.v3.xamlx。
- 它发送到工作流的下一条消息包含 orderid 和版本 3。客户端应用程序使用 URL httl://localhost/MyWorkflow.xaml 并且路由服务转发到 httl://localhost/MyWorkflow.v3.xamlx,这是指示的版本.
- 客户端应用程序想要向较旧的工作流发送消息。它使用 orderid 2 和版本 1(在此工作流启动时回复)。客户端应用程序使用 URL httl://localhost/MyWorkflow.xaml 并且路由服务转发到 httl://localhost/MyWorkflow.v1.xamlx,它是 incicated 版本。
查看这些截屏视频,了解有关 WCF 路由服务的更多信息。