天天看點

webservice和soap小原理

  從表面上看,Web service 就是一個應用程式,它向外界暴露出一個能夠通過Web進行調用的API。也就是說,可以利用程式設計的方法通過Web來調用這個應用程式。

  對Web service 更精确的解釋: Web services是建立可互操作的分布式應用程式的新平台。Web service平台是一套标準,它定義了應用程式如何在Web上實作互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平台上寫Web service ,隻要我們可以通過Web service标準對這些服務進行查詢和通路。

  不管你的Web service是用什麼工具,什麼語言寫出來的,隻要你用SOAP協定通過HTTP來調用它,總體結構都一緻。通常,你用你自己喜歡的語言(如VB 6或者VB.NET)來建構你的Web service,然後用SOAP Toolkit或者.NET的内建支援來把它暴露給Web客戶。于是,任何語言,任何平台上的客戶都可以閱讀其WSDL文檔,以調用這個Web service。客戶根據WSDL描述文檔,會生成一個SOAP請求消息。Web service都是放在Web伺服器 (如IIS) 後面的,客戶生成的SOAP請求會被嵌入在一個HTTP POST請求中,發送到Web伺服器來。 Web伺服器再把這些請求轉發給Web service請求處理器。請求處理器的作用在于,解析收到的SOAP請求,調用Web service,然後再生成相應的SOAP應答。Web伺服器得到SOAP應答後,會再通過HTTP應答的方式把它送回到用戶端。 bbs.bitsCN.com中國網管論壇

  基本概念

  SOAP

  XML和XSD

  WSDL(Web Services Description Language)

  WSML(Web Services Meta Language)

  什麼時候使用Web Services

  Web service是建立可互操作的分布式應用程式的新平台。Web service 的主要目标是跨平台的可互操作性。為了達到這一目标,Web service 是完全基于XML、XSD等獨立于平台、獨立于軟體供應商的标準的。

  Web service在應用程式跨平台和跨網絡進行通信的時候是非常有用的。Web service适用于應用程式內建、B2B內建、代碼和資料重用,以及通過Web進行用戶端和伺服器的通信的場合。

  當然,Web service也不是萬能的,你不能到處濫用Web service。在有些情況下,Web service 會降低應用程式的性能,而不會帶來任何好處。例如,一台機器或一個區域網路裡面運作的同構應用程式就不應該用Web service 進行通信。

  如何調用Web Services

  用戶端:取得服務端的服務描述檔案WSDL,解析該檔案的内容,了解服務端的服務資訊,以及調用方式。根據需要,生成恰當的SOAP請求消息(指定調用的方法,已經調用的參數),發往服務端。等待服務端傳回的SOAP回應消息,解析得到傳回值。

  服務端:生成服務描述檔案,以供用戶端擷取。接收用戶端發來的SOAP請求消息,解析其中的方法調用和參數格式。根據WSDL和WSML的描述,調用相應的COM對象來完成指定功能,并把傳回值放入SOAP回應消息傳回給使用者。

  高層接口

  使用高層接口,不需要知道SOAP和XML的任何資訊,就可以生成和使用一個WebService。Soap Toolkit 2.0通過提供兩個COM對象――SoapClient和SoapServer,來完成這些功能。

  在用戶端,隻需要生成一個SoapClient執行個體,并用WSDL作為參數來調用其中的mssoapinit方法。SoapClient對象會自動解析 WSDL檔案,并在内部生成所有Web Service的方法和參數資訊。之後,你就可以像調用IDispatch接口裡的方法一樣,調用裡面所有的方法。在VB或是腳本語言裡,你甚至可以直接在SoapClient對象名後面直接加上.方法(參數…)進行調用。

  低層接口

  要使用低層接口,你必須對SOAP和XML有所了解。你可以對SOAP的處理過程進行控制,特别是要做特殊處理的時候。

  在用戶端,首先要建立一個HttpConnector對象,負責HTTP連接配接。設定Connector的一些頭部資訊,比如 EndPoinURL和 SoapAction等。如果網絡連接配接需要使用代理伺服器,那也要在這裡設定相關的資訊。接着建立SoapSerializer對象,用于生成Soap消息。按照WSDL裡定義,把所有參數按順序序列化,得到一個完整的SOAP請求消息。該Soap消息,作為Payload通過HttpConnector 被發送到服務端。最後,生成一個SoapReader對象,負責讀取服務端傳回的SOAP消息,取得其中的傳回值。