在现代软件开发中,Web服务的互操作性是一个重要需求。这意味着不同平台的客户端都应该能够访问Web服务。为了实现这一点,关键在于各种平台能够生成代理,以便开发者不必手动编写SOAP消息,而是可以使用类来操作。Windows Communication Foundation (WCF) 是一个流行的框架,它允许开发者通过WSDL文件生成这些类。然而,WCF默认只支持WSDL 1.0文档。本文将展示如何扩展WCF,使其也能够处理WSDL 2.0文档。
WSDL(Web Services Description Language)是一种用于描述网络服务的XML格式。它定义了服务可以执行的操作、消息格式、协议绑定等。WSDL 1.0是广泛使用的版本,而WSDL 2.0则是较新的版本,提供了一些改进和扩展。尽管WSDL 2.0目前不如WSDL 1.0普遍,但它承诺成为REST和SOAP服务的下一代元数据标准。
许多SOAP框架只支持从WSDL 1.0文档生成客户端。WCF就是其中之一。如果尝试为使用WSDL2.0的服务创建WCF客户端,这可能会非常痛苦。本文将展示如何使用WCF消费WSDL 2.0文档。
要使用WCF处理WSDL 2.0,首先需要下载最新版本的svcutil2.exe。可以从本文附带的源代码或CodePlex项目页面下载。确保原始的svcutil.exe在当前路径中(通常位于C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin)。
使用svcutil2的方式与使用svcutil相同:
$> svcutil2.exe http://WSDL2WSDL.cloudapp.net/WSDL/simple2.WSDL
也可以使用svcutil已知的任何标志。
编写WSDL的代码生成是一个复杂的任务。选择了一种不同的方法:利用WCF已经知道如何从WSDL 1.0文档生成代码的事实,所以将WSDL 2.0文档转换为WSDL 1.0,然后交给WCF处理。
svcutil2基于与WSDL2WSDL相同的代码库,WSDL2WSDL是一个在线的WSDL2到WSDL1转换工具。实际的转换过程相当繁琐,但可以查看WSDL2WSDLConverter.cs类以获取完整细节。