監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

Web Service初探

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

Web Service初探


 
簡(jiǎn)介

回顧過去的六年,難以想象如果沒有互聯(lián)網(wǎng)的話,網(wǎng)絡(luò)計(jì)算會(huì)變成什么樣。更早的超文本模式失敗了,而互聯(lián)網(wǎng)成功了,這其中最基本的原因可以歸結(jié)為:互聯(lián)網(wǎng)簡(jiǎn)單且無處不在。從服務(wù)提供者(如網(wǎng)上商店)的角度來看,只要你會(huì)打字,你就可以接受服務(wù)。從服務(wù)API的角度來看,互聯(lián)網(wǎng)上絕大多數(shù)的活動(dòng)都可以由三種方法(GET, POST, 和PUT ) 以及一種標(biāo)記語言來完成。Web Service的興起正是基于這樣一個(gè)事實(shí):Web不僅可以作為一個(gè)信息平臺(tái) ,也可以作為一個(gè)服務(wù)平臺(tái)。

這里的“Services”不是指Amazon.com提供的那種粗糙的服務(wù),而是一種組件服務(wù),其他人可以用來構(gòu)造更強(qiáng)大的服務(wù)。例如,Microsoft提供了Passport服務(wù),提供Web上的認(rèn)證功能,所以,類似華盛頓郵報(bào)之類的電子報(bào)紙就不必自己開發(fā)認(rèn)證服務(wù),只要交給Passport做就可以了。當(dāng)然,這只是一個(gè)假設(shè)。

Oracle的動(dòng)態(tài)服務(wù)白皮書(dynamic services whitepaper)提供了更多組件服務(wù)的例子:匯率轉(zhuǎn)換,翻譯,貨物運(yùn)輸?shù)鹊?。IBM對(duì)Web Service有一個(gè)更為正式的定義:

Web ervices 是一種新的web應(yīng)用程序分支,他們是自包含、自描述、模塊化的應(yīng)用,可以發(fā)布、定位、通過web調(diào)用。Web service可以執(zhí)行從簡(jiǎn)單的請(qǐng)求到復(fù)雜商務(wù)處理的任何功能。一旦部署以后,其他web services應(yīng)用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務(wù)。

IBM的Web Service指南接著說在幾年前Web Service還是一個(gè)效率低下無法引起人們興趣的概念。但是隨著帶寬和存儲(chǔ)變的更為便宜,內(nèi)容更為動(dòng)態(tài)化,對(duì)不同平臺(tái)上廣泛而多樣的計(jì)算設(shè)備的集成的要求也更為強(qiáng)烈,同時(shí),也使得人們對(duì)代價(jià)(帶寬和存儲(chǔ))不那么敏感。

當(dāng)我已經(jīng)有了我中意的中間件平臺(tái)(RMI, Jini, CORBA, DCOM 等等)時(shí),為什么還要為Web而煩惱呢?中間件確實(shí)提供了強(qiáng)大的服務(wù)實(shí)現(xiàn)手段,但是,他們當(dāng)中沒有一個(gè)是絕對(duì)的勝利者。Web作為信息發(fā)布者的力量就在于簡(jiǎn)單且無處不在,這對(duì)解決現(xiàn)在這樣一個(gè)分裂中間件世界很重要。Web通過在傳統(tǒng)中間件平臺(tái)上更有效實(shí)現(xiàn)的Services,來提供一個(gè)統(tǒng)一且廣泛適用的接口,這樣就改善了這個(gè)平臺(tái)。

從一個(gè)N層應(yīng)用程序結(jié)構(gòu)的角度來看,web service只是一個(gè)方便程序訪問的包裝,服務(wù)還是要靠中間件來實(shí)現(xiàn)。訪問包括服務(wù)請(qǐng)求處理(監(jiān)聽者)和一個(gè)支持商業(yè)邏輯操作的接口,商業(yè)邏輯本身是由傳統(tǒng)的中間件平臺(tái)實(shí)現(xiàn)的。

Web Services平臺(tái)

那么什么是web service 平臺(tái)呢?最基本的平臺(tái)是XML加HTTP。HTTP是一個(gè)在Internet上廣泛使用的協(xié)議。XML是一種元語言,你可以用它書寫特定的語言來描述客戶和服務(wù)之間或者組件和復(fù)雜服務(wù)之間的交互。在web server之后,XML格式的消息被轉(zhuǎn)變成中間件的請(qǐng)求,返回的結(jié)果也會(huì)轉(zhuǎn)化成XML格式。

你可能會(huì)問,這與說CORBA是IDL加上RPC不是一樣嗎?這個(gè)平臺(tái)到底如何支持service的發(fā)現(xiàn),事務(wù),安全,認(rèn)證等等基本功能,以使它真正成為一個(gè)平臺(tái)呢? 下面我們將講述這一點(diǎn)。

有必要增加一些服務(wù),同時(shí)保持簡(jiǎn)單性和普遍性,來把Web構(gòu)建成一個(gè)功能更強(qiáng)大的平臺(tái)??梢哉J(rèn)為功能全面的web services平臺(tái)是XML+HTTP+SOAP+WSDL+UDDI。在更高層次上,可能還要加上一些尚未廣泛接受的技術(shù)如XAML,XLANG, XKMS,和XFS。

以下是對(duì)這些平臺(tái)要素的簡(jiǎn)要描述。需要指出的是,這些還是發(fā)展中的技術(shù),很多時(shí)候?qū)σ粋€(gè)問題會(huì)有多種解決方案。

SOAP (遠(yuǎn)程調(diào)用)

UDDI (貿(mào)易,目錄服務(wù))

WSDL (描述服務(wù)特征)

XLANG/XAML (為包括多種web services的復(fù)雜web事務(wù)提供支持)

XKMS (XML Key Management Specification) - 支持認(rèn)證和注冊(cè),這個(gè)工作還在進(jìn)展之中

SOAP

SOAP是一個(gè)協(xié)議規(guī)范,定義了傳遞XML-encoded數(shù)據(jù)時(shí)的統(tǒng)一方式。它還定義了使用HTTP作為底層通信協(xié)議時(shí)執(zhí)行遠(yuǎn)程調(diào)用(RPC)的方法。

SOAP的興起是基于這樣一種認(rèn)識(shí),無論現(xiàn)在的中間件是如何的好,他們都需要一個(gè)WAN包裝。以XML格式發(fā)送消息有很多好處,如能夠確?;ビ眯浴V虚g件使用者看來愿意容忍解析和序列化XML文檔的代價(jià),因?yàn)檫@可以讓他們的軟件使用范圍更寬。

IBM, Microsoft, UserLand,和DevelopMentor在2000年向W3C提交了SOAP,并成為W3C的Note,SOAP更長(zhǎng)遠(yuǎn)的發(fā)展規(guī)劃現(xiàn)在是由W3C的XML協(xié)議工作組來制定。這有力的表明了直到W3C工作組交付規(guī)范為止,SOAP都將是一個(gè)穩(wěn)定的規(guī)范。

UDDI (Universal Description, Discovery and Integration Service)

UDDI為客戶提供了動(dòng)態(tài)查找其它web

services的機(jī)制。使用UDDI接口,商務(wù)處理可以動(dòng)態(tài)的連接到外部的商務(wù)合作者提供的服務(wù)上。一個(gè)UDDI注冊(cè)類似于CORBA的trader,也可以把它想象成商業(yè)應(yīng)用程序的DNS服務(wù)。一個(gè)UDDI注冊(cè)有兩種客戶:要發(fā)布一個(gè)服務(wù)(和使用接口)的商務(wù)應(yīng)用,以及想要得到特定服務(wù)的客戶。下表是UDDI提供服務(wù)的概述。UDDI層在SOAP層之上,并假定請(qǐng)求和應(yīng)答都是以SOAP消息傳送的UDDI對(duì)象。下面還包含了一個(gè)簡(jiǎn)單的查詢。

關(guān)于支持全方位的發(fā)現(xiàn)(full-featured discovery),UDDI沒有一個(gè)近期的計(jì)劃。UDDI希望能夠成為支持其它標(biāo)準(zhǔn)的更高層服務(wù)的基礎(chǔ)。UDDI計(jì)劃支持更復(fù)雜的商務(wù)邏輯,包括層次型商業(yè)組織。UDDI有著廣泛的支持,IBM, Ariba,和

Microsoft都全力推動(dòng)它。到目前為止,它還不是一個(gè)開放的標(biāo)準(zhǔn)。

UDDI 舉例

查詢:下面在SOAP封裝之內(nèi)的查詢,返回Microsoft的詳細(xì)信息。

<find_business

generic="1.0" xmlns="urn:uddi-org:api">

face=Arial,Helvetica>

<name>Microsoft</name>

face=Arial,Helvetica></find_business>

結(jié)果:businessInfo元素中包含了Microsoft注冊(cè)的服務(wù)信息,也包括這個(gè)UDDI服務(wù)本身。

<businessList generic="1.0"

operator="Microsoft Corporation"

truncated="false"

xmlns="urn:uddi-org:api">

<businessInfos>

<businessInfo

businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3">

<name>Microsoft Corporation</name>

<description xml:lang="en">

Empowering people through great software -

any time, any place and on any device is Microsoft’s

vision. As the worldwide leader in software for personal

and business computing, we strive to produce innovative

products and services that meet our customer’s

</description>

<serviceInfos>

<serviceInfo

businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"

serviceKey="1FFE1F71-2AF3-45FB-B788-09AF7FF151A4">

<name>Web services for smart searching</name>

</serviceInfo>

<serviceInfo

businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"

serviceKey="8BF2F51F-8ED4-43FE-B665-38D8205D1333">


<name>Electronic Business Integration Services</name>

</serviceInfo>

<serviceInfo

businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"

serviceKey="611C5867-384E-4FFD-B49C-28F93A7B4F9B">

<name>Volume Licensing Select Program</name>

</serviceInfo>

<serviceInfo

businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"

serviceKey="A8E4999A-21A3-47FA-802E-EE50A88B266F">

<name>UDDI Web Sites</name>

</serviceInfo>

</serviceInfos>

</businessInfo>

</businessInfos>

</businessList>

WSDL :Web服務(wù)定義語言

WSDL為服務(wù)提供者提供了描述構(gòu)建在不同協(xié)議或編碼方式之上的web

service請(qǐng)求基本格式的方法。WSDL用來描述一個(gè)web

service能做什么,它的位置在哪里,如何調(diào)用它等等。在假定以SOAP/HTTP/MIME

作為遠(yuǎn)程對(duì)象調(diào)用機(jī)制的情況下,WSDL會(huì)發(fā)揮最大作用。UDDI注冊(cè)描述了web

service的絕大多數(shù)方面,包括服務(wù)的綁定細(xì)節(jié)。WSDL可以看作是UDDI服務(wù)描述的子集。

WSDL將服務(wù)定義為一個(gè)網(wǎng)絡(luò)端點(diǎn)的集合,或者說端口的集合。在WSDL里面,端點(diǎn)及消息的抽象定義與它們具體的網(wǎng)絡(luò)實(shí)現(xiàn)和數(shù)據(jù)格式綁定是分離的。這樣就可以重用這些抽象定義:消息,需要交換的數(shù)據(jù)的抽象描述;端口類型,操作的抽象集合。針對(duì)一個(gè)特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范構(gòu)成一個(gè)可重用的綁定。一個(gè)端口定義成網(wǎng)絡(luò)地址和可重用的綁定的聯(lián)接,端口的集合定義為服務(wù)。因此一個(gè)WSDL文檔在定義網(wǎng)絡(luò)服務(wù)的時(shí)候使用如下的元素:

類型--

使用某種的類型系統(tǒng)(比如XSD)定義數(shù)據(jù)類型的容器

消息-- 通訊數(shù)據(jù)抽象的有類型的定義

操作--

服務(wù)支持的動(dòng)作的抽象描述

端口類型-- 一個(gè)操作的抽象集合,該操作由一個(gè)或多個(gè)端點(diǎn)支持

綁定--

針對(duì)一個(gè)特定端口類型的具體的協(xié)議規(guī)范和數(shù)據(jù)格式規(guī)范

端口-- 一個(gè)單一的端點(diǎn),定義成一個(gè)綁定和一個(gè)網(wǎng)絡(luò)地址的聯(lián)接

服務(wù)-- 相關(guān)的端點(diǎn)的集合

所以,可以這樣說,WSDL給客戶提供了一個(gè)模板,方便他們描述和綁定服務(wù)。

下面是一個(gè)簡(jiǎn)單的例子,例子中的服務(wù)用來查找Motorala股票的價(jià)格。

服務(wù)描述:

<?xml version="1.0"?>

<definitions name="StockQuote"

targetNamespace="
http://example.com/stockquote.wsdl"

xmlns:tns="
http://example.com/stockquote.wsdl"

xmlns:xsd1="
http://example.com/stockquote.xsd"

xmlns:soap="
http://schemas.xmlsoap.org/wsdl/soap/"

xmlns="
http://schemas.xmlsoap.org/wsdl/">

<types>

<schema targetNamespace="
http://example.com/stockquote.xsd"

xmlns="
http://www.w3.org/1999/XMLSchema">

<element name="TradePriceRequest">

<complexType>

<all>

<element name="tickerSymbol" type="string"/>

</all>

</complexType>

</element>

<element name="TradePrice">

<complexType>

<all>

<element name="price" type="float"/>

</all>

</complexType>

</element>

</schema>

</types>

<message name="GetLastTradePriceInput">

<part name="body" element="xsd1:TradePrice"/>

</message>

<message name="GetLastTradePriceOutput">

<part name="body" element="xsd1:TradePriceResult"/>

</message>

<portType name="StockQuotePortType">

<operation name="GetLastTradePrice">

<input message="tns:GetLastTradePriceInput"/>

<output message="tns:GetLastTradePriceOutput"/>

</operation>

</portType>

<binding name="StockQuoteSoapBinding"

type="tns:StockQuotePortType">

<soap:binding style="document"

transport="
http://schemas.xmlsoap.org/soap/http"/>

<operation name="GetLastTradePrice">

<soap:operation

soapAction="
http://example.com/GetLastTradePrice"/>

<input>

<soap:body use="literal"

namespace="
http://example.com/stockquote.xsd"

encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>

</input>

<output>

<soap:body use="literal"

namespace="
http://example.com/stockquote.xsd"

encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>

</output>

</operation>

</binding>

<service name="StockQuoteService">

<documentation>My first service</documentation>

<port name="StockQuotePort" binding="tns:StockQuoteBinding">

<soap:address location="
http://example.com/stockquote"/>

</port>

</service>

</definitions>

<binding name="StockQuoteServiceBinding"

type="StockQuoteServiceType">

<soap:binding style="rpc"

transport="
http://schemas.xmlsoap.org/soap/http"/>

<operation name="getQuote">

<soap:operation

soapAction="
http://www.getquote.com/GetQuote"/>

<input>

<soap:body type="InMessageRequest"

namespace="urn:live-stock-quotes"

encoding="
http://schemas.xmlsoap.org/soap/encoding/"/>

</input>

<output>

<soap:body type="OutMessageResponse"

encoding="
http://schemas.xmlsoap.org/soap/encoding/"/>

</output>

</operation>

</binding>

<service name="StockQuoteService">

<documentation>My first service

</documentation>

<port name="StockQuotePort"

binding="tns:StockQuoteBinding">

<soap:address location="
http://example.com/stockquote"/>

</port>

</service>

</definitions>

SOAP請(qǐng)求:

POST /StockQuote HTTP/1.1

Host:
www.stockquoteserver.com

Content-Type: text/xml;

charset="utf-8"

Content-Length: nnnn

SOAPAction: "Some-URI"

<SOAP-ENV:Envelope

xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"

SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<m:GetLastTradePrice

xmlns:m="Some-URI">

<symbol>MOT</symbol>

</m:GetLastTradePrice>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

SOAP應(yīng)答:

HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"

SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>

<SOAP-ENV:Body>

<m:GetLastTradePriceResponse

xmlns:m="Some-URI">

<Price>14.5</Price>

</m:GetLastTradePriceResponse>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

XLANG

數(shù)據(jù)庫中的事務(wù)的傳統(tǒng)概念是原子性,即要么不做,要么全做。在分布式的系統(tǒng)中維持這種原子性,一般采用一種代價(jià)昂貴的處理方式,即兩相承諾。另一個(gè)相對(duì)優(yōu)化的模型也在研究之中(最初叫做sagas,由Hector

Garcia-Molina提出),即每個(gè)動(dòng)作都有一個(gè)明確的互補(bǔ)動(dòng)作,用以取消該動(dòng)作產(chǎn)生的結(jié)果。在現(xiàn)實(shí)生活中,這種互補(bǔ)動(dòng)作的例子很多,比如說,你在信用卡里取出$52,互補(bǔ)動(dòng)作就是存入$52,你發(fā)出一封Email說“你將會(huì)在7天內(nèi)拿到你預(yù)定的產(chǎn)品”,互補(bǔ)動(dòng)作就是發(fā)Email說“哦,你還得多等幾天”。XLang就是基于這樣一個(gè)概念,用來表示任何要取消的請(qǐng)求的互補(bǔ)動(dòng)作。而Web

Service的分布式基礎(chǔ)將推動(dòng)XLang規(guī)范的發(fā)展,使之能完成復(fù)雜的撤銷操作。

XAML

Transaction Authority Markup Language (XAML)提供了傳統(tǒng)的兩相承諾事務(wù)語義。在XAML規(guī)范中有一個(gè)B2B事務(wù)的例子。XAML不完全局限于兩相承諾,某些操作也可以象XLang一樣有互補(bǔ)動(dòng)作。兩相承諾在企業(yè)集成中顯然是很有效的,而大量的web事務(wù)(如B2C事務(wù))在更便宜的互補(bǔ)動(dòng)作模型中可以完成。除非XAML把互補(bǔ)動(dòng)作放在第一位,否則還是XLang存在的的理由更充分。

Scenario

下面的場(chǎng)景演示了一個(gè)商業(yè)事務(wù),包括一批web service,并將利用XAML??紤]一家公司在網(wǎng)上向一家化工廠購(gòu)買苯。為了讓買家能夠購(gòu)買,賣方必須有第三方提供的附加增值服務(wù),如運(yùn)貨方式,付款方式,意外保險(xiǎn),安全運(yùn)輸執(zhí)照等等。必須等到所有服務(wù)都就緒且滿足他的要求,買方才會(huì)同意購(gòu)買。他可以買或者不買,換句話說,必須滿足所有的相關(guān)要求,才有可能完成這次商務(wù)活動(dòng)。

提供頂層商業(yè)事務(wù)功能的軟件必須協(xié)調(diào)每個(gè)web service。包括(1)賣方存貨系統(tǒng);(2)保險(xiǎn)服務(wù)確保產(chǎn)品能被運(yùn)輸;(3)財(cái)務(wù)服務(wù)確保依照賣方的形式付款;(4)運(yùn)輸服務(wù)保證按時(shí)發(fā)送貨物;(5)協(xié)調(diào)服務(wù)確保與政府的安全要求一致。

XKMS (XML Key Management Specification)

XKMS是Microsoft和Verisign用XML應(yīng)用程序集成PKI和數(shù)字認(rèn)證(用于Internet事務(wù)安全性)的成果。關(guān)鍵的思想是將簽名處理放到Web上的可信服務(wù)器(trust server)上,這樣小客戶就不必自己來做這些內(nèi)容。XKMS依賴于XML數(shù)字簽名規(guī)范和正在制定中的XML加密規(guī)范?,F(xiàn)在的XKMS規(guī)范依賴于XML,SOAP,WSDL。

其它例子

Web service平臺(tái)是一個(gè)發(fā)展的生態(tài)系統(tǒng),達(dá)爾文主義還在起作用,這里有進(jìn)化,有競(jìng)爭(zhēng),還有混亂。下面是一個(gè)小例子。

XFS

XMethods 文件系統(tǒng)服務(wù)讓你能夠通過SOAP接口讀或貼文件。這個(gè)系統(tǒng)讓開發(fā)者可以創(chuàng)建使用集中而穩(wěn)定數(shù)據(jù)的服務(wù)。理想情況下,這種文件系統(tǒng)能夠用來集中被多個(gè)節(jié)點(diǎn)訪問的信息。例如,可以用它支持程序補(bǔ)丁的自動(dòng)升級(jí)。XFS提供了一個(gè)客戶端工具,在Windows Explorer中集成了XFS web service,這樣Windows Explorer集成了基于XML-SOAP的文件系統(tǒng)。XFS是開放源碼的,由xmethods.com始創(chuàng),它的前景還不清楚,但是,這個(gè)想法在技術(shù)上是很有吸引力的。

發(fā)布:2007-03-25 13:22    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
石家莊OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢