相关这个问题 https://stackoverflow.com/questions/2064518/loading-persisted-workflow-after-workflowdefinition-has-changed-in-wf4.
我了解如何使用来实现工作流程的版本控制WorkflowApplication http://msdn.microsoft.com/en-us/library/system.activities.workflowapplication(VS.100).aspx。如果您保留旧版本工作流程的原始 XAML 定义,则可以使用正确的方法加载它们WorkflowApplication
构造函数。
你如何确保WorkflowServiceHost http://msdn.microsoft.com/en-us/library/system.servicemodel.workflowservicehost.aspx当您想要在 IIS 中托管工作流时,使用正确的工作流定义吗?
有一个WorkflowServiceHost
您可以使用它来加载工作流定义的构造函数,但是当您通过 XAMLX 文件托管在 IIS 中时,您不会调用WorkflowServiceHost
您自己,这是由 IIS 以某种方式处理的。那么,如何确保为正确版本的工作流程加载正确的工作流程定义?
使用 WorkflowServiceHost 的方法与使用 WorkflowApplication 的形式并没有什么不同。保留各种 XAML(X) 版本的基础知识仍然适用。因此,对于 WorkflowServiceHost,您需要创建多个 WorkflowServiceHost,每个托管不同版本的 XAMLX。每个都有不同的端点。因此,基本上,en 端点都可以处理工作流服务及其版本。
那么如何从客户端获取消息到正确的WorkflowServiceHost呢?在这里,WCF 路由服务是您的朋友。它们不是让客户端直接与您的 WorkflowServiceHost 通信,而是使用中间 WCF 路由服务。这反过来会检查消息并将它们路由到托管相应 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,这是所指示的版本。
Check these http://rocksolidknowledge.com/screencasts.mvc有关 WCF 路由服务的更多信息的截屏视频。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)