设计一个业务流程与WCF服务交互
在上篇,我们已经通过WCF适配器获取到了外部服务(演示中是Web service)的元数据,并导入到了我们的BizTalk项目中。通过BizTalk,可以将来自外部这些异构系统当中的服务重新进行流程的编排,根据我们的业务需求进行设计,搭建面向服务的架构体系(SOA)。
下面来介绍一下将要在演示中创建的这个流程的步骤:
- 从外部接收一个贷款申请的消息,将消息命名为msgLoanApplication;
- 将接收到的消息进行转换,转换为LonesomePine服务能够接收的请求消息类型,将转换后的消息命名为msgLoanServiceRequest;
- 发送转换后的消息至外部的LonesomePine服务,该服务会根据SSN的值来计算信用卡积分并进行贷款申请的审批;
- LonesomePine服务将审批的结果作为响应消息发送回给流程,将该响应消息命名为msgLoanServiceResponse;
- 接收到服务的返回值后,会创建出一个新的消息,它包含来自服务的响应消息以及贷款申请表中的基本信息,并将这个新消息命名为msgFinalLoanDocument;
- 最终将是一个包含全部贷款申请所需要的信息及批复状态的消息,这个消息可以被其他系统或业务人员订阅,根据这个消息去处理相应的业务。
1. 在解决方案资源管理器中,双击ConsumeService.Orchestrations下的LoanProcessing.odx,当前这个业务流程是空的。
2. 从上图中我们不仅能看到BizTalk有一个图形化的业务流程设计界面,并且还提供了左侧工具箱当中的众多业务流程组件,通过这些组件,我们可以设计出基于BPEL4WS标准并超过这个标准的流程,BPEL4WS在这里不多做介绍,就是一个业务流程的标准,基于这个标准设计出来的流程我们认为它是符合规范并且可用的,BizTalk这些内置的业务流程组件都是基于这个标准研发出来的,所以我在这里能够很自信的说,用BizTalk设计出来的业务流程一定是基于BPEL4WS这个标准的。我们在这里添加如下几个业务流程组件,我会通过表格的方式来描述组件名称及其放置的位置,看不懂表格不必担心自己的智商,下面还会有相应的截图。
组件 命名 接收 Get LoanApplication 转换 Create Service Request Message 发送 Send LoanForEvaluation 接收 Get EvaluatedLoan 构造消息 Create Final Loan Document 转换 CreateFinalLoanDocument 判定 Is Loan Pre Approved 发送 Send Approved Loan 发送 Send Denied Loan
3. 编排好的流程如上图所示,是不是很有意思?就像搭积木一样,使用图形化的工具按照我们自己的需求去设计业务流程。设计好之后,设置一个流程发起节点,点击最顶端的接收组件,在属性窗口中,将激活设置为True。
创建业务流程中的消息变量
在业务流程中我们需要处理消息,这些消息通过接收端口接收过来,或是通过发送端口将消息发送出去,无论是哪种方式,消息在流程中都需要得到实例化,并进行相应的处理,下面将介绍在流程中创建消息变量,我们可以把一个流程文件(.odx)理解成一个流程模板,将来上线之后成百上千个实例都将跑在我们设计的这个模板上。因此在这里创建的消息,并不特指某一个消息实例,而是一个流程模板中的消息变量。
1. 在业务流程视图中,右键消息->新建消息
2. 在属性窗口的标示符中键入msgFinalLoanDocument,并将消息类型中选择架构节点-> <从引用的程序集中选择…>->引用->ConsumeServices.Schema->FinalLoanDocument->确定
在这里创建的msgFinalLoanDocument消息包含原始的贷款请求内容和批复状态,这个消息我们可以认为它是流程的输出结果。
3. 重复上述步骤再创建一个消息,命名为msgLoanApplication,消息类型为ConsumeService.Schemas.LoanApplication。这个消息是流程触发时接收到的初始消息,是银行的客户发起的一个贷款请求消息。
4. 创建另一个消息命名为msgLoanServiceRequest,选择该消息类型为多部分消息类型->ConsumeService.Orchestrations.LoanProcessingService_IsApproved_InputMessage。
这个消息用来请求一个外部的名为LonesomePine 的Web services服务,该消息会包含来自原始贷款申请中重要的详细信息,该信息中的数据将是LonesomePine 服务用来决定贷款审批是否通过的判断条件。
5. 按此方法创建最后一个消息变量,命名为msgLoanServiceResponse,选择该消息类型为多部分消息类型->ConsumeService.Orchestrations.LoanProcessingService_IsApproved_OutputMessage。这个消息将从LonesomePine服务收到一个批复的响应消息。