使用WorkflowServiceHost进行WF4工作流版本控制

Ron*_*erg 3 iis workflow-foundation iis-7.5 workflow-foundation-4 xamlx

此问题相关.

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

WorkflowServiceHost如果要在IIS中托管工作流,如何确保使用正确的工作流定义?

还有一个WorkflowServiceHost,你可以用它来加载工作流定义构造函数,但是当你正在主持内部通过XAMLX文件IIS,你不叫WorkflowServiceHost自己,这是由IIS不知何故处理.那么如何确保为我的工作流程的正确版本加载正确的工作流程定义?

Mau*_*ice 8

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

那么如何从客户端获取消息到正确的WorkflowServiceHost?这里的WCF路由服务是你的朋友.他们不使客户端直接与WorkflowServiceHost通信,而是使用中间WCF路由服务.这反过来检查消息并将它们路由到托管相应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,这是已发布的版本.

有关WCF路由服务的详细信息,请查看这些截屏视频.

  • 是的,它是尚未完全烘烤的区域之一. (2认同)