Web Service
Web服务是一种跨编程语言和跨平台的远程调用技术,就是通过网络调用其他网站的资源。
Web Service 技术
1、SOAP
Simple Object Access Protocol,简单对象访问协议,是在分散和分布式的环境中交换信息的简单协议,基于XML。
下面看一个SOAP请求和响应示例
(WeatherWebService.asmx中的getSupportCity方法,传入byProvinceName,返回getSupportCityResult):
请求:
POST /WebServices/WeatherWebService.asmx HTTP/1.1
Host: www.webxml.com.cn
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://WebXml.com.cn/getSupportCity"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getSupportCity xmlns="http://WebXml.com.cn/">
<byProvinceName>string</byProvinceName>
</getSupportCity>
</soap:Body>
</soap:Envelope>
响应:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getSupportCityResponse xmlns="http://WebXml.com.cn/">
<getSupportCityResult>
<string>string</string>
<string>string</string>
</getSupportCityResult>
</getSupportCityResponse>
</soap:Body>
</soap:Envelope>
从上面可以得到如下信息:
SOAP是基于HTTP协议的,在发送和返回的SOAP中都包含HTTP的发送和返回信息;
SOAP是基于XML的;
SOAP由以下部分组成:
Envelop:必须,把此XML文档标识为一条SOAP信息,SOAP 消息必须拥有与命名空间 "http://www.w3.org/2001/12/soap-envelope" 相关联的一个 Envelope 元素。
Header:可选, SOAP Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)。如果 Header 元素被提供,则它必须是 Envelope 元素的第一个子元素。
Body:包含要调用的方法和方法的参数
<getSupportCity xmlns="http://WebXml.com.cn/">
<byProvinceName>string</byProvinceName>
</getSupportCity>
Fault:可选, SOAP Fault 元素用于指示错误消息,在Body元素中。
如果存在异常,则在返回的SOAP信息中加入SOAP Fault 元素:
<soap:Body>
<soap:Fault>
<faultcode xmlns:q0="ns=cnblogs.com/tyb1222">q0:code</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: 0x00</faultstring>
<faultactor/>
<detail />
</soap:Fault>
</soap:Body>
Web Service调用过程
客户端通过WSDL文件的URI地址,创建底层的代理类,调用这些代理,访问WSDL定义的Web Service。
客户端将客户端的调用方法变成SOAP格式的通过HTTP协议发送出去。
服务端接收客户端发送的SOAP数据,服务端解析数据(SOAP是固定的协议),然后知道要调用那个类的那个方法,然后执行方法,并把方法返回的结果变成SOAP格式的数据,通过HTTP协议返回至客户端。
客户端接收SOAP数据,解析出返回结果。
Web Service服务端开发有.NET和Java EE两个平台,这个后面详述。
Web Service客户端调用别人或自己发布的Web Service,如天气预报服务等。
常用Web Service汇总(天气预报、时刻表等): http://developer.51cto.com/art/200908/147125.htm
2、WSDL
Web Service Description Language,是一个用来描述WEB服务和说明如何与WEB服务进行通讯的XML语言。为用户提供详细的接口说明书。
WSDL仅仅是一个简单的XML文档,他包含一系列描述WEB服务的定义。
WSDL文档结构
<types> | web service 使用的数据类型 |
表示当前的WSDL中用到的所有数据类型,为了更大程度的保持中立性,使用XML Scheme语言定义数据类型。
包含了Web服务中方法的参数的数据类型和返回值的数据类型。
<message> | web service 使用的消息 |
定义了Web服务的方法的参数,每一个part表示一个参数,输入参数和输出参数各自定义。
类型对用于< types >中的定义类型。
<portType> | web service 执行的操作 |
<portType> 元素是最重要的 WSDL 元素。描述一个Web Service。可被执行的操作、以及相关的类。
Name属性表示类。
Operation表示表示Web服务方法。
Input是方法的输入参数,它引用<message >标签中的输入参数,output是方法的返回值,它引用<message >标签中的输出参数。
<binding> | web service 使用的通信协议 |
<binding>标签是完整描述协议、序列化和编码的地方,<types>,<message>和<portType>标签处理抽象的数据内容,而<binding>标签是处理数据传输的物理实现。
<binding>标签把前三部分的抽象定义具体化。
<service > |
service是一套<port>元素。在一一对应形式下,每个<port>元素都和一个location关联。如果同一个<binding>有多个<port>元素与之关联,可以使用额外的URL地址作为替换。