Web Service及其构成
Web Service是什么
简单来说Web Service就是在Web上提供的一套数据API,是基于SOAP协议的,主要用于解耦和重用。
资料都在说Web Service用到三种技术或规则:WSDL、SOAP、UDDI。撇开枯燥的定义我的理解就是:
WSDL文档对Web Servvice的功能以及访问细节进行文档描述,然后寄存在UDDI容器(比如IIS、TOMCAT等WEB服务器),客户端通过SOAP协议与服务器进行通讯。
- WSDL:Web Service描述语言,提供详细的接口说明;
- SOAP:简单对象访问协议,它是在HTTP协议基础上一个基于XML的协议,负责Web Service通讯;
- UDDI:注册中心,服务提供者需发布服务到注册中心,客户使用服务需到注册中心查询并发现服务;
WSDL结构
WSDL的构成,为了方便理解可以分为WHAT、HOW、WHERE,如下图
WHAT部分:
- 端口类型(接口)定义
端口类型(Port type)的定义是一个Web服务合约的基石。可以把端口想象成一个入口场所。一个Web服务合约可以拥有一个或多个端口“类型”。每个端口类型本质上代表一个技术接口或接入点。其实把“端口类型定义”称作“接口定义”会更容易理解点。 -
操作定义
一个Web服务想要被另一个程序所使用,它就需要暴露可以被外部消费的能力或功能。这些能力或功能就被称为操作,并且被表示为操作定义(operation definition)。一个端口类型可以作为相关操作集合的容器。 -
消息定义
当一个Web服务被通过它的一个操作调用的时候,消费者程序需要与之交换数据,才能使该Web服务可以执行所请求的功能。消息地鞥一(message definition)本质上就建立了数据进行传输的一个“迷你结构”。
存在如下3种类型的消息定义:
- 输入(Input):由一个消费者程序发送到Web服务的消息,输入参数;
- 输出(Output):由Web服务发送到消费者程序的消息,输出参数;
- 故障(Fault):由Web服务发送到消费者程序的出错通知消息,异常信息;
-
类型定义
一个给定的输入、输出或故障消息需要拥有一个预先定义的数据结构。这就像JAVA、.NET里的数据类型是相似的,但这些数据类型是与语言平台无关的。数据类型是由XML Schema文档来定义的,XML Schema既可以在WSDL文档直接定义也可以试用import引入。
HOW部分:
-
端口类型绑定描述
用来详细描述可以被消费者程序来调用以及同Web服务交互的通信技术。
端口类型(接口)定义可以同一个或多个绑定定义进行关联,每一个绑定定义都包含下面两条信息:- 消息协议绑定(Messaging Protocol Binding):定义一种技术或产业标准(消息协议),用来指定在发送者打包以及接收者解包时需要遵循的消息格式;
- 传输协议绑定(Transport Protocol Binding):定义在网络中消息应当被如何传输的通信技术(传输协议);
-
操作绑定定义
操作绑定定义(operating binding definition)表示与端口类型绑定的类型相同的绑定定义,唯一的区别是它只和操作相关。如果操作并没有指定该绑定,那么它会从他的上层端口类型继承绑定的位置。 -
消息绑定定义
与操作绑定类似,消息绑定定义(Message binding definition)同样表示一种细粒度的绑定定义,而在这里是同某个输入、输出或故障消息相关的。如果消息相关的绑定没有被提供,那么消息就会从它的上层操作或它的上层端口类型(如果操作绑定也不存在的话)来继承绑定位置。
WHERE部分:
-
服务定义
服务定义(service definition)就是简单地把相关的端口(端点)定义组合起来。 -
端口(端点)定义
每个绑定定义都需要同一个端口定义(prot definition,有时也被称为端点定义)相关联,它仅仅是作为地址定义的一个容器。同一端口定义可以被不同的端口类型、操作或消息绑定定义所使用。 -
地址定义
地址定义(address definition)会建立一个物理网络地址。基于用来访问该地址定义的端口类型,操作、或消息绑定所定义的通信技术(传输协议)不同,实际的地址可以是Web URL、邮件地址或是某种其他类型的传输相关地址。
WSDL实例
使用.net建立Web Service,接口如下:
/// <summary> /// Summary description for Service1 /// </summary> [WebService(Namespace = "http://oseye.net/test/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] public string SayHello(string name,int age) { return "Hello ,My name is "+name+".I'm "+age; } }
在浏览器中预览如下图:
点击服务说明,打开WSDL描述如下图:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。