Workflow Service 4.0 是一个重大变更:从 Workflow Service 4.0 调用 WCF 服务






2.60/5 (4投票s)
Workflow service 4.0 提供了一些新的变更和功能,并附带了一个用于从工作流服务调用 WCF 服务的示例解决方案。
引言
我曾有机会在 Visual Studio 2010 RTM 中查看新的 Workflow 功能,并注意到 WF3.5 和 WF4 之间有许多不同之处。主要的替代是他们移除了状态机工作流,并提供了一个更好的“流程图”,不再有代码活动。WCF 工作流服务 4.0 的实现方式非常不同,不再有代码隐藏文件(抱歉那些在 WF 4.0 中寻找代码活动的人)。所有这些更改都是为了提高性能和更好地理解工作流。
背景
本文档面向那些对 workflow 3.0、3.5 和 WCF 服务有一定了解的人,尽管所有其他初学者也可以通过下载源代码来学习工作流。
Workflow 4.0 中的新功能和替换项
看看下面 4.0 和 3.5 中工作流模板的图片。

状态机工作流已被流程图取代
众所周知,WF3.0 或 3.5 中有两种类型的工作流:顺序工作流和状态机工作流。您可以向这些工作流添加活动。在 WF4 中,工作流是一个包含其他活动的活动。这解释了为什么 WF4 中只有一个活动库项目模板。流程图工作流是一个更好的选择,微软已经提出了。我们大多数人都知道流程图的控制,这个工作流也正是基于这个概念工作的。
没有“CodeActivity”,也没有代码隐藏
Workflow 4.0 完全基于 XAML 设计工作,不再有代码隐藏的概念。但是,如果您仍想调用任何方法,则有适当的控件项,如方法调用器,以及配置类型和方法名称。我将在下面详细解释如何在 WF4.0 中调用方法。
自定义实现和自定义活动
可以通过创建活动库并在 XAML 设计器中进行配置来实现自定义实现。
消息流和工作流实例
Workflow4.0 服务以接收请求开始,以向服务客户端发送响应结束。所有实现都可以完成在这两个主要活动之间。

通过检查“接收请求”上的“CanCreateInstance
”属性(如上图所示),将创建新的工作流实例。我们不再需要像以前那样创建工作流实例。
在工作流实例中创建公共变量
以前,我们习惯在代码隐藏文件中创建公共变量,但在工作流 4 中,只能从工作流 XAML 设计器创建变量。这些公共变量可用于作为参数传递或在方法中返回值,或用于任何类型的操作。
请按照以下步骤创建变量:
- 选择最顶层的活动(序列),然后单击窗口底部的“变量”链接。
- 根据下图所示,输入名称、类型、作用域和默认值。自定义类型可以通过下拉列表中的浏览选项给出。
工作流入门:从工作流服务调用 WCF 服务
解决方案结构概述

正如我们所见,该解决方案包含两个服务项目:工作流服务和 WCF 服务,以及一个 Web 客户端,用于测试与所有这些服务的集成。两个服务合同是分开的,因为将这两个合同混合在一起不好,而且也便于为每个客户端定义合同。数据合同是一个单独的程序集,将在所有项目中引用。在此示例应用程序中,WCF 客户端通过服务工厂调用,我们也可以同样用于在 Web 客户端中调用工作流服务。
工作流服务项目中的 WCF 客户端自定义类
public class SapAdapterClient
{
public static string VerifyCredit(Basket basket)
{
return ServiceFactory.CreateInstance<ISapAdapterService>().VerifyCredit(basket);
}
}
这是调用 WCF 服务并将结果返回给工作流服务的自定义类。WCF 客户端通过服务工厂进行调用,该工厂将调用 WCF 服务。
如何调用工作流服务中的方法
通过以下步骤,可以在工作流服务中轻松进行方法调用:
- 在
workflowservice
项目中创建一个类,其中包含一个调用 WCF 服务的方法。 - 将工具箱中的“调用方法”活动放置在“基本元素”下。
- 单击“目标类型”下拉列表,单击“浏览类型”,然后选择创建的用于调用 WCF 服务的类。
- 在方法名称文本区域中输入方法名称。
- 单击“属性”并设置参数和结果。
如需进一步信息,请下载源代码并进行查看。