Web Service是在构建SOA平台中广泛使用的技术。在BizTalk开发过程中使用SOAP适配器接收和发送 Web Services 请求。业务流程可以发布为 Web Services 并使用外部 Web Services。由于Web Service是基于Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等内容比较丰富。这里仅探讨在 BizTalk中如何使用Web Service。
如下图所示,我们构造了这样一个场景:数据库中存储Addressbook表。我们通过BizTalk将发布Web Service接收添加数据到数据库表中。如果在数据库操作成功的话则返回受影响的行数。如是失败的话则返回异常信息。
在设计流程过程中,需要添加异常捕获形状接收在数据库操作过程中产生的异常信息。将错误信息借助双向端口的Fault Port将异常信息返回给请求系统。注意在异常处理模块中结束流程,否则会产生错误:
must receive before sending a message whose messagetype corresponds to a requestreponse operation on an implemented port
发布架构为Web Services
BizTalk设计器通过使用BizTalk Web Services发布向导将流程或架构发布为Web Service. MSDN推荐仅将架构发布为Web Service。“如果您想要更详细的解释,那就是松散耦合! 这样做使您在更改业务流程时具有更大的*性,无需中断调用方。”。 虽然不是很赞成松散耦合这个观点,因为通过比较两种方式发布出来的Web Servcie最终都是通过注入的方式调用全局缓存的流程类库。
但是还是建议仅将架构发布为Web Service。因为如果仅将架构发布为Web Service的话生成的Web Service项目仅在需要使用的Schema.但如果将流程发布为Web Services的话可能一些其他的架构也会暴露在Web Services的项目中。比如上图所示的流程(Schema和流程在一个同项目文件中)中如果使用发布流程的话则在流程中使用的添加数据的架构也会暴露 在Web Service中。这样是不太安全的因为数据库操作的架构包含存储过程名称,参数及类型之类的信息。
[通过发布架构产生的Web Service] [通过发布流程产生的Web Service]
当然直接选择发布流程的话就不需要设置方法和参数名等信息简化了发布的过程。选择哪种方式可以看实际情况而定。
讨论了两种发布方式的区别下面提示Step by Step的方式发布架构为Web Service。
1.在Visual Studio开发环境的工具栏下找到BizTalk Web Service发布向导,或者可以在开始-程序-Microsoft BizTalk Server 2006目录下找到BizTalk Web Service发布向导。
2.在创建 Web Service 页面下选择发布架构为向导。发布流程的方式比较简单将在之后讨论。
3.在Web Service定义页面。可以分别对这些节点命名。当然还可以根据实际需要对其项目进行添加、删除、修改等操作。注意方法名称应该与Orchestration设计过程中使用的端口的操作名称一致。
4.输入目标命名空间,这个命名空间是在SOAP请求消息中使用的。所以可以不跟架构中使用的消息一致。
5.选择发布位置,这里的名称是虚拟目录的名称。如果有旧版本的相同名称的话需要选择覆盖安装。另外选择访问方式和为BizTalk程序创建接收位置。
6. 至此将架构发布成了Web Service.窗口中提示的路径是Web Service项目保存的路径。可以直接打开项目源码,(但最好不要做改动,如果不是很熟悉的话。)
同时可以在IIS里查看到新添加的虚拟目录
发布流程为Web Service
1.发布流程为Web Service的过程比较简单,接上面第2步开始选择发布流程为Web Service。
2. 建议在Visual Studio中使用工具菜单下的Web Services发布向导,这样这一步就可以直接定义到项目中的动态库。
3.选择需要发布的流程和端口。
4.后续的部署跟上面是一致的。可以从第4步开始设置。
BizTalk Application绑定相应的Web Service。
这一过程比较简单,如果在发布向导的时候已经选择了为应用程序产生接口的话直接在应用程序配置窗口选择相应的接收位置即可。
BizTalk消费Web Service.
在BizTalk的应用程序中引用Web Service的方法跟一般的.NET应用程序类似。
1.在BizTalk应用程序中添加Web引用
2.选择本地计算机上的Web服务,在列表中选择相应的服务。添加相应的名称之后可以在类型窗口查看到相应的端口类型和消息类型。
3.在流程中创建消息时选择对应的Web Message Types。创建端口时也同样使用已经存在的端口类型,即引用Web Services创建的端口类型。
4.项目部署之后,在配置端口时选择类型为SOAP,在配置页面输入Web Service路径。
Web Services的测试
在.NET开发 Web Services的过程中常常会采用页面输入的方式对Web Service进行测试。但是BizTalk生成的Web Service项目已经在Web.Config配置文件中禁止HTTP GET和HTTP POST方法。因此需要通过使用XMLSpy或SoapUI等工具对Web Service进行测试。
我们来测试本次Sample的场景,在SOAPUI中新建一个Project。在请求参数中将“?”更改为相应的数值。发送请求,则返回受影响的行数。测试结果跟预期的一致。
另外,由于我们需要测试返回错误消息的情况因此在数据库中将名称字段设为主键。然后根据发送相同的请求参数返回错误信息。请注意,红线部分是在异常处理模块里通过字符串构造的方法添加的。
总结
经过以上的探讨基本上涵盖了SOAP Adapter的基本应用。本Sample的代码可以已经上传可供下载:BTSSOAP[www.cbcye.com].zip