Workflow服务 Hands-On Labs(一) --- 提交申请(上)

概述

    包含在.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、申请人收到邮件通知。


目标
在本次动手实验中,您将学习如何:

  • 使用消息传递的活动,为工作流收发数据。
  • 针对特定的场景为配置消息活动
  • 添加服务引用去创建引用其他服务的活动
  • 利用活动模板来创建预配置的请求 - 应答模式。
  • 设置基于内容的相关性,关联从​​同一个客户端发出相关信息

系统必备

在本次实验中,你必须安装下列工具

  • MicrosoftVisual Studio 2012 –  下载
  • Microsoft.NET Framework 4 – 下载
  • SQLServer 2008 Express (included with Visual Studio 2010) – 下载
  • MicrosoftOutlook or Windows Live Mail Client – 下载
  • WindowsServer AppFabric – Download using the Web Platform Installer –下载

练习

本手把手实验由以下练习组成:

  • 提交申请服务
  • 邮件通知
  • 申请审核
  • 发布解决方案
  • 纠错

SetUp

使用“依赖项检查器(Dependency Checker)”,验证本实验的所有先决条件。为了确保一切都正确配置,请按照下列步骤操作:

1、如果你之前没有做检查,请运行依赖项检查器。要做到这一点,请浏览到源代码的Source\Setup文件夹,双击打开Dependencies.dep文件。这个文件运行后会提示你有哪些必备软件没有安装,并会提供下载链接,并且帮你安装数据库以及代码块。如果你打不开这个dep文件,但是你安装过VS2010TKInstallation工具,你可以去它默认的安装目录,进入C:\VS2010TrainingKit\Assets\DependencyChecker文件夹,运行DependencyChecker.msi文件,这样就可以打开Dependencies.dep文件了。如果不幸的你没有装过VS2010TKInstallation。到哥这里来吧!最后提醒一句,打开dep文件时,它所在的文件夹路径千万不要太深,不然装数据库时会失败。

2。如果你是第一次安装Windows Server AppFabric的系统会提示您配置它。如果你想重新配置搜索配置AppFabric菜单的快捷方式配置AppFabric请执行以下步骤


依次设置监控配置和暂留配置


Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第1张图片

Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第2张图片

Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第3张图片


 配置完监控存储和暂留存储时,如果你在前面运行.dep文件正常,那么你的数据库服务器中会增加两个数据库:ApplicationServerMonitoringWF4Persistence。那么现在你只需要选择这两个数据库就好。如果运行.dep失败,那么现在就手动输入数据库名,AppFabric会为你创建这两个数据库。另外,如果运行dep失败,你还必须运行“\Source\Setup\scripts\tasks”文件夹下的HRApplicationData.sql,以安装我们需要保存申请信息的主数据库HRApplication。


练习一:提交申请服务

在练习一中,你将创建一个简单的服务,用于从智能客户端接受一个申请并返回处理结果。

1、打开源代码文件夹 Source\Ex1\Begin中的解决方案,这个解决方案中包含两个项目一个是WCF 工作流服务,另外一个是数据访问层,使用Entity Data Model(EDMX)实体数据模型来访问数据库。

HRApplicationServices项目中添加一个WCF 工作流服务SubmitApplication.xamlx

Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第4张图片


2、剖析工作流服务

添加了WCF工作流服务之后,我们最关心的问题就是:服务契约是什么?如何绑定?宿主的地址?在此,我们将详细学习刚刚创建的WCF Workflow Service以及了解其如何同外界交互。

工作流服务有一个被服务中的消息活动(MessageActivity)定义的隐式契约。SubmitApplication.xamlx中已经有一个正在使用的契约,如果你以前使用过WCF服务,你会觉得它很熟悉。在工作流设计器中打开SubmitApplication.xamlx,你会看到在Sequence中包含两个活动,一个是标记为ReceiveRequest的请求活动,另一个是标记为SendResponse的响应活动,请求活动决定着传递给服务的参数。点击ReceiveRequest请求活动中【查看消息】。
Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第5张图片

消息内容是一个名为data的变量,你可以在设计界面选中Sequential Service后点击Variables按钮

这里一共有两个变量,第一个变量处理关联请求和响应消息第二个变量数据保存你希望收到的消息内容

 

下面看看SendResponse活动中有什么返回值

Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第6张图片

从中我们可以看到,响应消息将会转换为字符串形式。

现在我们已经拥有了一个工作流服务,但是它并没有启动元数据发布。在.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、创建服务实现纲要

 我们的服务分为三段,接受申请,检验申请以及返回处理结果。整个练习就是来实现这几个阶段。现在,我们为每一个阶段添加占位符:

  • 在工作流设计器中打开SubmitApplication.xamlx
  • 将最外层的Sequence活动的显示名从Sequential Service改为Application Service
    Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第7张图片
  • 第一个占位符需要事务,因为我们在修改数据库(HRApplication)的同时会持久化我们的工作流到持久化数据库(WF4Persistence)中。从消息传递组拖拽一个TransactedReceiveScope到ApplicationService Sequence活动的最上面,将显示名称设为Receive Application。 
  • 将下方的ReceiveRequest活动拖拽到Receive Application活动的Request区域。这样当收到一个消息后,会创建一个事务。
    Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第8张图片
  • body区,我们将放置需要在事务中完成的工作。由于需要完成的工作不止一个,所以我们在这里将使用Sequence活动(名为Save and Respond
  • 将下方的SendResponse活动拖入到Sequence
    Workflow服务 Hands-On Labs(一) --- 提交申请(上)_第9张图片
  • 收起Receive Application活动
  • 第二阶段将会验证申请,在实现这个逻辑之前,我们先拖拽一个Sequence到Receive Application下面,命名Screen Applicant
  • 同样为第三阶段拖拽一个Sequence到Screen Applicant的下面,命名为Notify Applicant

 

你可能感兴趣的:(workflow,service,工作流,审批,hands-on,labs)