今天因为工作变动的事情,浪费了不少时间,其余时间了解了一下WebService的工作原理。
WebService是一种通信技术,是基于XML+SOAP+WSDL+UDDI来实现的,一个个的说。
XML:可扩展标记语言,其实就是按照一定规则编写的纯文本文件!它的结构大概类似于这样:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
.
.
.
.
</CATALOG>
正式由于它是纯文本文件,所以任何系统都能识别它,WebService能跨平台的原因就在于此!
SOAP:简单对象访问协议,百度百科上的解释是“一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议”,它的结构大概类似于这样:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
可以看出它与上面的XML片段风格完全一致,因为本来就是基于XML的!
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
看起来是不是很熟悉?没错,我们的HTML文件里也有相似的代码,因为SOAP协议也和HTML文件一样,是通过HTTP协议来进行通信的!而且仅能通过HTTP协议通信,这个也是其性能的弊端吧!
WSDL:网络服务描述语言,是使用XML编写的,用来描述WebService服务,简单来说,它就是用来描述某个WebService的具体信息的,如提供的接口名称,所需的参数名称,参数类型,是否返回值,返回类型等等,所以叫做“描述”语言。它的结构类似于这样:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
UDDI:即统一描述、发现和集成协议,百度百科的描述为“统一描述、发现和集成协议是一种规范,它主要提供基于Web服务的注册和发现机制,为Web服务提供三个重要的技术支持:①标准、透明、专门描述Web服务的机制;②调用Web服务的机制;③可以访问的Web服务注册中心。”,因为我也不是特别懂这个,但就我理解的是,UDDI也是基于XML和SOAP协议,实现了一组公共接口,企业和公司可以通过这组接口,将自己的WebService服务注册到注册中心,其他需要服务的人,通过查询注册中心可以使用所有注册到这里的WebService服务。但是我到现在还是不知道,这个注册中心的物理位置是在哪些地方?
所以说WebService其实是一种通信技术,而我昨天写的,通过VS2012建立WebService服务应该叫做ASP.NET WebService,是微软自己实现的框架,封装了底层的具体实现,避免了自己手动去写WSDL和满足SOAP协议的消息~