在Visual Studio 2010 RTM中,可以看到WF3.5和WF4之间存在许多差异。WF4的主要变化之一是移除了状态机工作流,并提供了更好的替代品“流程图”。此外,WCF工作流服务4.0的实现方式也有很大不同,不再有代码后置文件。所有这些变化都是为了提高性能和更好地理解工作流。
本文面向那些对工作流3.0、3.5和WCF服务有一定了解的读者,尽管所有其他初学者也可以通过下载源代码来学习工作流。
让看看4.0和3.5中的工作流模板之间的差异。状态机工作流被流程图所替代。众所周知,WF3.0或3.5中有两种类型的工作流:顺序和状态机。可以向这些工作流添加活动。在WF4中,工作流是一个包含其他活动的活动。这就是为什么在WF4中只有一个活动库项目模板的原因。流程图工作流是微软提出的更好的选择。大多数人都知道流程图的控制,这种工作流正是基于相同的概念工作的。
在Workflow 4.0中,完全基于XAML设计,不再有代码后置概念。但是,如果有人想要调用任何方法,有适当的控制项,如方法调用器和配置类型和方法名称。将在下面详细解释如何在WF4.0中调用方法。
可以通过创建活动库并在XAML设计器中配置来实现自定义实现。
Workflow4.0服务从接收请求开始,以向服务客户端发送响应结束。所有实现都可以在这两个主要活动之间完成。
通过检查“Receive Request”上的以下属性“CanCreateInstance”来创建新的工作流实例(如上图所示)。不需要像以前那样创建工作流实例。
以前,通常在代码后置文件中创建公共变量,但在工作流4中,只允许从工作流XAML设计器中创建变量。这些公共变量可以作为参数或方法的返回值,或进行任何类型的操作。
按照以下步骤创建变量:
如所见,解决方案包含两个服务项目,工作流服务和WCF服务,以及用于测试与所有这些服务集成的Web客户端。由于混合两个合同并不好,也容易为每个客户端定义合同,因此服务合同是分开的。数据合同是一个单独的程序集,将被所有项目引用。在这个示例应用程序中,WCF客户端是通过服务工厂调用的,也可以在Web客户端中使用相同的方法来调用工作流服务。
public class SapAdapterClient
{
public static string VerifyCredit(Basket basket)
{
return ServiceFactory.CreateInstance().VerifyCredit(basket);
}
}
这是一个自定义类,它调用WCF服务并将结果返回给工作流服务。WCF客户端是通过服务工厂调用的,这将使调用WCF服务。