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

Iis 使用WorkflowServiceHost的WF4工作流版本控制,iis,workflow-foundation,workflow-foundation-4,iis-7.5,xamlx,Iis,Workflow Foundation,Workflow Foundation 4,Iis 7.5,Xamlx,与……有关 我了解如何使用实现工作流版本控制。如果保留旧版本工作流的原始XAML定义,则可以使用正确的WorkflowApplication构造函数加载它们 在IIS中托管工作流时,如何确保使用正确的工作流定义 您可以使用WorkflowServiceHost构造函数加载工作流定义,但当您通过XAMLX文件在IIS内部托管时,您自己不调用WorkflowServiceHost,这是由IIS以某种方式处理的。那么,如何确保为我的工作流的正确版本加载正确的工作流定义呢?使用WorkflowServi

与……有关

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

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


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

使用WorkflowServiceHost的方法与使用WorkflowApplication的方法没有多大区别。保持各种XAML(X)版本的基础仍然适用。因此,对于WorkflowServiceHost,您需要创建多个WorkflowServiceHost,每个WorkflowServiceHost都承载不同版本的XAMLX。每个都有不同的端点。因此,基本上,en端点同时处理工作流服务及其版本

那么,如何将消息从客户端发送到正确的WorkflowServiceHost?这里的WCF路由服务是您的朋友。客户端使用中间WCF路由服务,而不是直接与WorkflowServiceHost通信。这会依次检查消息并将其路由到承载相应XAMLX文件的WorkflowServiceHost。那么它怎么知道呢。有几种方法可以做到这一点。例如,使用消息关联标识符执行数据库查找时,对新工作流的请求始终会转到最新版本。最简单的方法是让工作流服务返回版本号作为初始请求的一部分,并使其成为每个后续请求的必需部分。通过这种方式,WCF路由服务只需发送消息数据即可完成所有工作

这方面的一个例子是:

  • 客户端使用订单Id 7发送启动新工作流的消息,并返回版本3。客户端应用程序使用URLhttl://localhost/MyWorkflow.xaml 路由服务转发到httl://localhost/MyWorkflow.v3.xamlx 这是最后一个版本
  • 它发送到工作流的下一条消息包含orderid和版本3。客户端应用程序使用URLhttl://localhost/MyWorkflow.xaml 路由服务转发到httl://localhost/MyWorkflow.v3.xamlx 这是指定的版本
  • 客户端应用程序希望向旧工作流发送消息。它使用orderid 2和版本1(此工作流启动时答复)。客户端应用程序使用URLhttl://localhost/MyWorkflow.xaml 路由服务转发到httl://localhost/MyWorkflow.v1.xamlx 这是所提及的版本

  • 有关WCF路由服务的更多信息,请查看屏幕广播

    谢谢你详尽的回答,我明白了。完成这项工作需要相当多的管道。是的,这是一个尚未完全烘焙的区域。嗨!我有一个关于版本控制的小问题。工作流中引用的程序集如何?我已将DLL部署在wf主机站点内的bin目录中。。但是当我复制一个我使用的程序集的新版本(其中包含一些业务逻辑)时,它会破坏我的持久化实例。。我在这里迷路了。。谢谢(顺便说一句,对不起,我的英语糟透了!)这取决于你如何序列化你的对象。如果您使用的是DataContract序列化程序,它应该能够根据对象的更改方式工作。如果使用二进制序列化,它通常不起作用,而且还取决于程序集的强命名。