<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    當(dāng)柳上原的風(fēng)吹向天際的時(shí)候...

    真正的快樂(lè)來(lái)源于創(chuàng)造

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    注:下文是關(guān)于WebService的一個(gè)概念和總結(jié),其中的例子來(lái)自http://www.box.net/shared/cyg98xgz78 。 如果您對(duì)WebService已經(jīng)熟悉就不用浪費(fèi)時(shí)間了。

    一.什么是Web服務(wù)?

    Web服務(wù)是網(wǎng)絡(luò)化應(yīng)用程序的一種,我們可以將Web服務(wù)看成一種函數(shù)調(diào)用,只不過(guò)這個(gè)函數(shù)的實(shí)體存在于某個(gè)服務(wù)器上,而調(diào)用在客戶端進(jìn)行。Web服務(wù)的思想很簡(jiǎn)單,即服務(wù)器通過(guò)網(wǎng)絡(luò)提供Web服務(wù),其它程序可以將由Web服務(wù)器封裝的功能無(wú)縫的集成到自己的程序中去。Web服務(wù)是跨平臺(tái)跨語(yǔ)言的,它可以由多種語(yǔ)言創(chuàng)建,也可以由多種語(yǔ)言使用。WebService定義了一套標(biāo)準(zhǔn)的調(diào)用過(guò)程:服務(wù)器端使用WSDL來(lái)向外界描述它所提供的服務(wù),客戶端與服務(wù)器端的交互采用SOAP協(xié)議。

    二.Web服務(wù)有什么益處?
    處于這個(gè)信息化高度發(fā)展的世界,每個(gè)軟件系統(tǒng)都勢(shì)必要和別的軟件系統(tǒng)進(jìn)行交互,它們可能由不同語(yǔ)言編寫運(yùn)行在不同的服務(wù)器上,相互間的調(diào)用是一個(gè)很大的難題。Web服務(wù)就是為解決這些問(wèn)題而誕生的,它的語(yǔ)言平臺(tái)無(wú)關(guān)性可以和任一平臺(tái)或語(yǔ)言的軟件進(jìn)行交互,這樣,Web服務(wù)就可以像一座橋梁,可以連通信息化世界中的孤島。

    三.SOAP協(xié)議。
    在Web服務(wù)中,服務(wù)器和客戶機(jī)需要傳遞接收消息,這就需要對(duì)傳輸?shù)臄?shù)據(jù)格式采取一定的約定措施,這個(gè)約定就是SOAP協(xié)議,它的全稱是簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(Simple Object Access Protocl)。SOAP是基于XML的消息包裝器,它既包括客戶端送給服務(wù)器端希望調(diào)用的類和方法的一種消息格式,也包括服務(wù)器返回?cái)?shù)據(jù)的消息格式。有個(gè)這個(gè)協(xié)議,服務(wù)器和客戶機(jī)就能明白對(duì)方想干什么。SOAP消息一般基于HTTP來(lái)傳輸,也可以基于其他協(xié)議。
    下面是一個(gè)客戶端向服務(wù)器發(fā)送的SOAP消息例子:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        
    <ns1:getServerPublicKey xmlns:ns1="http://heyang.com">
        
    </ns1:getServerPublicKey>
    </soap:Body>
    </soap:Envelope>
    客戶機(jī)向服務(wù)器端發(fā)送消息時(shí),</soap:Body>中的XML包含要調(diào)用的方法和參數(shù),如上述的getServerPublicKey。

    下面是服務(wù)器反饋給客戶機(jī)的SOAP消息例子:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        
    <soap:Body>
        
    <ns1:getServerPublicKeyResponse xmlns:ns1="hello.XFire">    <ns1:out>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkSpbrSfBIIu+f4mMr7Ie2JdWCBEmlZ1mcoZ0UTNMGaVwexfRax+HC/uusXvkkdoUGYjMaiMycRsQtSOLsfKjOVY/8zBLs0tAOEVelg6MyiF3DV7PVgGEq0dpXJCz0MWFY34a1YJMbPfvPa+VpZaIFbzICUPRhVdBYPAboXthFyQIDAQAB
        
    </ns1:out>
        
    </ns1:getServerPublicKeyResponse>
        
    </soap:Body>
    </soap:Envelope>
    當(dāng)服務(wù)器端送回消息時(shí),</soap:Body>中包含調(diào)用的結(jié)果,它可以是單個(gè)值,也可以是含有多個(gè)值的復(fù)雜數(shù)據(jù)類型。如上面的<ns1:out>中的節(jié)點(diǎn)值。

    另:在調(diào)試WebService程序,想要查看SOAP消息時(shí),可以使用Apache的TCPMon工具,具體使用方法請(qǐng)看http://www.tkk7.com/heyang/archive/2010/12/10/340294.html.

    四.服務(wù)器端收到SOAP消息后的動(dòng)作

    以XFire為例,當(dāng)一個(gè)來(lái)自客戶端的SOPA請(qǐng)求送達(dá)WebService服務(wù)端時(shí),它會(huì)先送到一個(gè)Servlet(XFireConfigurableServlet)中(請(qǐng)參看web.xml中的配置),然后開始解析SOAP消息,再根據(jù)配置文件services.xml找到接口com.heyang.IService和具體的實(shí)現(xiàn)類com.heyang.ServiceImpl中的方法,調(diào)用函數(shù)產(chǎn)生結(jié)果,然后再包裝成SOAP消息返回。Axis的做法也是類似的。

    五.WSDL
    我們現(xiàn)在可以想到Web服務(wù)是一個(gè)對(duì)象,含有一個(gè)或多個(gè)方法。如何對(duì)一個(gè)WebService服務(wù)器能提供的方法進(jìn)行說(shuō)明呢?這里就要用到WSDL(Web Service Description Language),它定義了Web服務(wù)提供的可供操作的函數(shù),具體如下:
    <?xml version="1.0" encoding="UTF-8" ?>
    <wsdl:definitions targetNamespace="hello.XFire" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="hello.XFire" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
    <wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="hello.XFire">
    <xsd:element name="getServerPublicKey">
      
    <xsd:complexType />
      
    </xsd:element>
    <xsd:element name="getServerPublicKeyResponse">
    <xsd:complexType>
    <xsd:sequence>
      
    <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:base64Binary" />
      
    </xsd:sequence>
      
    </xsd:complexType>
      
    </xsd:element>
    <xsd:element name="getResonse">
    <xsd:complexType>
    <xsd:sequence>
      
    <xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:base64Binary" />
      
    <xsd:element maxOccurs="1" minOccurs="1" name="in1" nillable="true" type="xsd:base64Binary" />
      
    </xsd:sequence>
      
    </xsd:complexType>
      
    </xsd:element>
    <xsd:element name="getResonseResponse">
    <xsd:complexType>
    <xsd:sequence>
      
    <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:base64Binary" />
      
    </xsd:sequence>
      
    </xsd:complexType>
      
    </xsd:element>
      
    </xsd:schema>
      
    </wsdl:types>
    <wsdl:message name="getServerPublicKeyRequest">
      
    <wsdl:part name="parameters" element="tns:getServerPublicKey" />
      
    </wsdl:message>
    <wsdl:message name="getResonseResponse">
      
    <wsdl:part name="parameters" element="tns:getResonseResponse" />
      
    </wsdl:message>
    <wsdl:message name="getServerPublicKeyResponse">
      
    <wsdl:part name="parameters" element="tns:getServerPublicKeyResponse" />
      
    </wsdl:message>
    <wsdl:message name="getResonseRequest">
      
    <wsdl:part name="parameters" element="tns:getResonse" />
      
    </wsdl:message>
    <wsdl:portType name="helloPortType">
    <wsdl:operation name="getServerPublicKey">
      
    <wsdl:input name="getServerPublicKeyRequest" message="tns:getServerPublicKeyRequest" />
      
    <wsdl:output name="getServerPublicKeyResponse" message="tns:getServerPublicKeyResponse" />
      
    </wsdl:operation>
    <wsdl:operation name="getResonse">
      
    <wsdl:input name="getResonseRequest" message="tns:getResonseRequest" />
      
    <wsdl:output name="getResonseResponse" message="tns:getResonseResponse" />
      
    </wsdl:operation>
      
    </wsdl:portType>
    <wsdl:binding name="helloHttpBinding" type="tns:helloPortType">
      
    <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="getServerPublicKey">
      
    <wsdlsoap:operation soapAction="" />
    <wsdl:input name="getServerPublicKeyRequest">
      
    <wsdlsoap:body use="literal" />
      
    </wsdl:input>
    <wsdl:output name="getServerPublicKeyResponse">
      
    <wsdlsoap:body use="literal" />
      
    </wsdl:output>
      
    </wsdl:operation>
    <wsdl:operation name="getResonse">
      
    <wsdlsoap:operation soapAction="" />
    <wsdl:input name="getResonseRequest">
      
    <wsdlsoap:body use="literal" />
      
    </wsdl:input>
    <wsdl:output name="getResonseResponse">
      
    <wsdlsoap:body use="literal" />
      
    </wsdl:output>
      
    </wsdl:operation>
      
    </wsdl:binding>
    <wsdl:service name="hello">
    <wsdl:port name="helloHttpPort" binding="tns:helloHttpBinding">
      
    <wsdlsoap:address location="http://localhost:8080/XfireSample/services/hello" />
      
    </wsdl:port>
      
    </wsdl:service>
      
    </wsdl:definitions>
      以上內(nèi)容在瀏覽器中輸入http://localhost:8080/XfireSample/services/hello?wsdl 可以看到。

      WSDL本身比較復(fù)雜,它主要給程序看的,利用當(dāng)前大多數(shù)的Web服務(wù)工具可以生成它,而無(wú)需手工編寫它。
      WSDL的主要目的在于將自己的Web服務(wù)的所有相關(guān)內(nèi)容如提供服務(wù)的傳輸方式,服務(wù)方法接口,接口參數(shù),服務(wù)路徑等,生成相應(yīng)的完全的文檔,發(fā)布給使用者。使用者可以通過(guò)這個(gè)WSDL文檔,創(chuàng)建相應(yīng)的SOAP請(qǐng)求消息,通過(guò)HTTP傳遞給Web服務(wù)提供者;Web服務(wù)提供者在完成請(qǐng)求服務(wù)后,將SOAP返回消息傳回給請(qǐng)求者,服務(wù)請(qǐng)求者再根據(jù)WSDL文檔將SOAP返回消息解析成程序能夠理解的內(nèi)容。

    六.UDDI
    UDDI是Universal Description Discovery and Intergretion的縮寫,是一種創(chuàng)建注冊(cè)服務(wù)的規(guī)范,以便大家將自己的Web Service進(jìn)行注冊(cè)發(fā)布供使用者查找。
    當(dāng)服務(wù)提供者想將自己的Web Service發(fā)布,以便外部能找到其服務(wù)時(shí),那么服務(wù)提供這可以將自己的Web Service注冊(cè)到相應(yīng)的UDDI商用注冊(cè)網(wǎng)站。
    UDDI并非一個(gè)必須的Web Service組件,服務(wù)方完全可以不進(jìn)行UDDI的注冊(cè)。因?yàn)閃SDL文件中已經(jīng)給出了Web Service的地址URI,外部可以通過(guò)它進(jìn)行相應(yīng)的Web Service調(diào)用.

    七.消息服務(wù)與WebService的比較

    在概念上,Web Service和消息服務(wù)它們都是傳輸數(shù)據(jù)到別的組件,都是使應(yīng)用程序之間可以進(jìn)行異步通信。
    消息處理和Web Service是互補(bǔ)的技術(shù),消息服務(wù)明確是一項(xiàng)為企業(yè)內(nèi)部而不是為商業(yè)領(lǐng)域內(nèi)的應(yīng)用程序提供通信的技術(shù),使用消息處理,企業(yè)必須與共用的傳輸格式達(dá)成一致,在定義應(yīng)用程序之間傳遞的數(shù)據(jù)方面,消息具有更多的靈活性,另外,Web Service缺乏一個(gè)定義好的機(jī)制,用于確保SOAP傳輸和事務(wù)處理,這些是消息服務(wù)已經(jīng)定義好和成熟的部分。
    Web Service,是松散耦合的組件,應(yīng)用程序發(fā)送請(qǐng)求給它進(jìn)行處理和數(shù)據(jù)服務(wù),結(jié)果返回給應(yīng)用程序繼續(xù)處理,傳輸機(jī)制是Simple Object Access Protocol(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,SOAP),Web Service通過(guò)SOAP能有效的通過(guò)HTTP協(xié)議發(fā)送XML文檔。Web Service具有公開性,具有快速推進(jìn)的標(biāo)準(zhǔn)和大量出版物與技術(shù)文檔。Web Service有潛力來(lái)連接不同的應(yīng)用程序組件,把軟件定義成服務(wù)而不是產(chǎn)品。如果應(yīng)用程序是新建的,則Web Service更為合理。

    八.使用Axis的WebService實(shí)現(xiàn)。
    以上文章是針對(duì)XFire的WS實(shí)現(xiàn),如果要用Axis的實(shí)現(xiàn),可以參考這里 http://www.tkk7.com/heyang/archive/2009/10/10/297729.htmlhttp://www.tkk7.com/heyang/archive/2009/09/29/296897.html。個(gè)人感覺(jué)XFire的方案更方便快捷,如果沒(méi)有限制的話建議使用XFire實(shí)現(xiàn)Web Service。

    好了,感謝您看到這里。
    posted on 2010-12-10 17:27 何楊 閱讀(443) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品一区二区三区免费| 国产一级淫片视频免费看| 曰批全过程免费视频免费看| 99久久亚洲精品无码毛片| 国产在线ts人妖免费视频| 67194国产精品免费观看| 久久99精品免费一区二区| 亚洲精品国产av成拍色拍| 亚洲成色999久久网站| 亚洲精品国产精品乱码不卞| 成人免费淫片在线费观看| 青青草无码免费一二三区| 91av免费在线视频| 菠萝菠萝蜜在线免费视频| 亚洲欧美日韩综合久久久久| 亚洲无限乱码一二三四区| 亚洲国产高清在线| 亚洲AV综合色区无码另类小说| 亚洲一级特黄无码片| 免费99热在线观看| 国产午夜鲁丝片AV无码免费| 最近中文字幕无吗高清免费视频| 国产精品免费观看| 2021免费日韩视频网| 18女人毛片水真多免费| 最近高清中文字幕免费| 99在线观看免费视频| 一级做a爰全过程免费视频| 你懂的免费在线观看网站| 永久免费不卡在线观看黄网站| 成人无码精品1区2区3区免费看| 色爽黄1000部免费软件下载| 国产午夜亚洲精品不卡电影| 亚洲AV日韩综合一区| 日韩亚洲人成网站| 黄色一级毛片免费| 国产99精品一区二区三区免费| 一区二区三区在线观看免费| 在线视频网址免费播放| 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 亚洲高清免费在线观看|