概述
包含在.net framework4.0中的WF4为我们提供了一种新的方式去创建web服务,这种方式将强大的WCF(Windows Communication Foundation)和灵活的WF4集成在一起。在本练习中,你将会了解怎样使用WF4 的Messaging活动来实现一个人力资源的工作流场景。你还会体验到在最新Windows Server AppFabric中改进的宿主、发布、跟踪以及纠错功能。源代码在此
Contoso公司有一个填写“公开就业申请单”的业务流程。这一过程将分为三个层次:智能客户端应用程序,一个网站,一个中间层的工作流服务,和数据层。
1、申请人使用Winform客户端应用程序向WF服务提交申请;
2、WF服务调用Education服务来验证申请人的教育背景;
3、如果教育背景验证通过,一个人工审查者将会受到一封邮件,通过邮件中的链接转到网站去查看申请人的工作申请;
4、该网站将调用工作流服务传递人工审查的结果
5、申请人收到邮件通知。
目标
在本次动手实验中,您将学习如何:
系统必备
在本次实验中,你必须安装下列工具
练习
本手把手实验由以下练习组成:
SetUp
使用“依赖项检查器(Dependency Checker)”,验证本实验的所有先决条件。为了确保一切都正确配置,请按照下列步骤操作:
1、如果你之前没有做检查,请运行依赖项检查器。要做到这一点,请浏览到源代码的Source\Setup文件夹,双击打开Dependencies.dep文件。这个文件运行后会提示你有哪些必备软件没有安装,并会提供下载链接,并且帮你安装数据库以及代码块。如果你打不开这个dep文件,但是你安装过VS2010TKInstallation工具,你可以去它默认的安装目录,进入C:\VS2010TrainingKit\Assets\DependencyChecker文件夹,运行DependencyChecker.msi文件,这样就可以打开Dependencies.dep文件了。如果不幸的你没有装过VS2010TKInstallation。到哥这里来吧!最后提醒一句,打开dep文件时,它所在的文件夹路径千万不要太深,不然装数据库时会失败。
依次设置监控配置和暂留配置
配置完监控存储和暂留存储时,如果你在前面运行.dep文件正常,那么你的数据库服务器中会增加两个数据库:ApplicationServerMonitoring和WF4Persistence。那么现在你只需要选择这两个数据库就好。如果运行.dep失败,那么现在就手动输入数据库名,AppFabric会为你创建这两个数据库。另外,如果运行dep失败,你还必须运行“\Source\Setup\scripts\tasks”文件夹下的HRApplicationData.sql,以安装我们需要保存申请信息的主数据库HRApplication。
练习一:提交申请服务
在练习一中,你将创建一个简单的服务,用于从智能客户端接受一个申请并返回处理结果。
1、打开源代码文件夹 Source\Ex1\Begin中的解决方案,这个解决方案中包含两个项目一个是WCF 工作流服务,另外一个是数据访问层,使用Entity Data Model(EDMX)实体数据模型来访问数据库。
在HRApplicationServices项目中添加一个WCF 工作流服务SubmitApplication.xamlx。
2、剖析工作流服务
添加了WCF工作流服务之后,我们最关心的问题就是:服务契约是什么?如何绑定?宿主的地址?在此,我们将详细学习刚刚创建的WCF Workflow Service以及了解其如何同外界交互。
工作流服务有一个被服务中的消息活动(MessageActivity)定义的隐式契约。SubmitApplication.xamlx中已经有一个正在使用的契约,如果你以前使用过WCF服务,你会觉得它很熟悉。在工作流设计器中打开SubmitApplication.xamlx,你会看到在Sequence中包含两个活动,一个是标记为ReceiveRequest的请求活动,另一个是标记为SendResponse的响应活动,请求活动决定着传递给服务的参数。点击ReceiveRequest请求活动中【查看消息】。
消息内容是一个名为data的变量,你可以在设计界面选中Sequential Service后点击Variables按钮
这里一共有两个变量,第一个变量处理关联请求和响应消息。第二个变量数据保存你希望收到的消息内容。
下面看看SendResponse活动中有什么返回值
从中我们可以看到,响应消息将会转换为字符串形式。
现在我们已经拥有了一个工作流服务,但是它并没有启动元数据发布。在.net 4.0中我们可以使用tagless无标记语法做WCF配置。打开web.config文件,添加下面的内容。这个简单的WCF配置虽然不包含Service配置节,但是仍然可以为我们提供必要的默认basicHttpBinding绑定地址和契约。
<system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
右键点击SubmitApplication.xamlx文件,然后【在浏览器中查看】看看我们的工作流服务
3、创建服务实现纲要
我们的服务分为三段,接受申请,检验申请以及返回处理结果。整个练习就是来实现这几个阶段。现在,我们为每一个阶段添加占位符: