360 likes | 537 Views
第 16 章 Web Service應用程式架構. 16-1 Web Service 應用程式架構 16-2 SOAP 的基礎 16-3 HttpRequest 物件建立 SOAP 應用程式 16-4 WSDL 的基礎 16-5 Google 搜尋服務的 Web Service. 16-1 Web Service應用程式架構. Web Service 的基礎 Web Service 應用程式架構. Web Service 的基礎 -1. Web Service 屬於一種企業級的應用程式,可以透過 Internet 建立自動機制提供資料交換和工作分享等資源共享的功能。
E N D
第16章 Web Service應用程式架構 • 16-1 Web Service應用程式架構 • 16-2 SOAP的基礎 • 16-3 HttpRequest物件建立SOAP應用程式 • 16-4 WSDL的基礎 • 16-5 Google搜尋服務的Web Service
16-1 Web Service應用程式架構 • Web Service的基礎 • Web Service應用程式架構
Web Service的基礎-1 • Web Service屬於一種企業級的應用程式,可以透過Internet建立自動機制提供資料交換和工作分享等資源共享的功能。 • Web Service使用簡單和公開標準的協定,提供低成本的軟體整合和資料分享,它是一種可以在不同的作業系統,使用不同的程式語言開發的應用程式,能夠直接與位在不同位置的其它應用程式進行通訊和資料交換。
Web Service的基礎-2 • Web Service應用程式提供一組通用服務,可以同時提供多個用戶端(Client)使用,這是一組使用XML格式作為傳遞訊息的函數呼叫,用戶端透過HTTP傳送函數呼叫給伺服端,伺服端以HTTP將結果傳回給用戶端,它提供用戶端更多的彈性,因為可以只使用所需的函數呼叫取得所需的資訊。
Web Service應用程式架構-1 • Web Service基本上是提供一組通用的遠端函數呼叫(RPC,Remote Procedure Calls),為了用戶端和伺服端能夠依據相同的訊息格式和規格來傳遞資訊,我們需要一種標準的通訊協定,這就是「SOAP」(Simple Object Access Protocol),它是一種結合XML格式的訊息和HTTP協定的通訊協定,使用SOAP的Web Service應用程式架構。
16-2 SOAP的基礎 • 什麼是SOAP • SOAP訊息的基本語法 • SOAP訊息交換架構
什麼是SOAP-1 • 「SOAP」(Simple Object Access Protocol)是一種在分散系統交換資料的通訊協定,它屬於一種XML基礎的通訊協定,其傳送的資料就是XML元素的資料。 • SOAP屬於一種標準HTTP通訊協定的資料交換協定,由Microsoft、DevelopMentor、IBM、Lotus Development Corp.、HP、UserLand Software等公司所共同製定,SOAP 1.1規格屬於微軟Windows DNA 2000架構的主要元素,提供分散式應用程式系統開發的資料交換。
什麼是SOAP-2 • 目前Internet服務或瀏覽程式都是支援HTTP,分散式Internet應用程式雖然能夠使用「RPC」(Remote Procedure Calls)執行DCOM物件,但是HTTP通訊協定並不支援RPC,此時的SOAP通訊協定就可以解決這個問題,其特點如下所示: • SOAP是一種負載很輕的通訊協定,傳送的資料是文字內容的XML文件。 • SOAP屬於一種在應用程式間使用HTTP通訊協傳遞資料的協定。 • SOAP是一種XML基礎的技術,簡單而且擁有很好的擴充性。
SOAP訊息的基本語法-1 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header> <t:Transaction xmlns:t="http://www.company.com/transaction" SOAP-ENV:mustUnderstand="1"> 5 </t:Transaction> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:getPrice xmlns:m="http://www.company.com/soap"> <code>1234</code> </m:getPrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
SOAP訊息的基本語法-2 SOAP的名稱空間 • SOAP應用程式產生的SOAP訊息需要定義所有元素和屬性的名稱空間,而且SOAP應用程式一定要能夠處理收到訊息的名稱空間,SOAP擁有兩個預設的名稱空間,如下所示: • SOAP Envelope預設的名稱空間,使用的字頭為【SOAP-ENV】,如下所示: http://schemas.xmlsoap.org/soap/envelope/ • SOAP加碼和資料型態預設的名稱空間,如下所示: http://schemas.xmlsoap.org/soap/encoding/
SOAP訊息的基本語法-3 Envelope元素 • Envelope元素為SOAP訊息的根元素,SOAP訊息一定擁有此元素,如果元素包含名稱空間宣告和額外的屬性,屬性也需要使用名稱空間的字頭。 • encodingStyle屬性是一組URI用來定義SOAP加碼和資料型態,這個屬性能夠出現在SOAP訊息的任何元素,如果在Envelope元素,此時所有的子元素都屬於名稱空間的範圍。
SOAP訊息的基本語法-4 Header元素 • Header元素屬於SOAP訊息的選項元素,如果出現,一定為Envelope元素的子元素,這是一個彈性機制可以擴充SOAP訊息成為一個分散式的模組,常常使用在授權、交易和付款管理。 • Header元素的子元素一定需要宣告名稱空間和字頭,可以使用兩個屬性,如下表所示:
SOAP訊息的基本語法-5 Body元素 • Body元素屬於SOAP訊息的主要元素,這是Envelope元素的子元素,如果擁有Header元素,Body元素必為Header元素的下一個元素,它的內容是傳送的訊息,可以包含RPC呼叫,如下所示: <m:getPrice xmlns:m="http://www.company.com/soap"> <code>1234</code> </m:getPrice>
SOAP訊息交換架構 • SOAP訊息基本屬於單向的資料傳遞,可以從用戶端到伺服端使用HTTP送出請求訊息,在伺服器處理後將結果使用HTTP回應到用戶端,如下圖所示:
HTTP請求的SOAP訊息 POST /BookDetail HTTP/1.1 Host: www.company.com Content-Type: text/xml; charset="Big5" Content-Length: nnnn SOAPAction: " http://www.company.com/soap#getBookDetail" <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:getBookDetail xmlns:m="http://www.company.com/soap"> <code>F8915</code> </m:getBookDetail> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
HTTP回應的SOAP訊息 HTTP/1.1 200 OK Content-Type: text/xml; charset="Big5" 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:getBookDetailResponse xmlns:m="http://www.company.com/soap"> <book code="F8915"> <title>ASP網頁製作徹底研究</title> <author>陳會安</author> <price>580</price> </book> </m:getBookDetailResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
16-3 HttpRequest物件建立SOAP應用程式 • SOAP應用程式的架構 • HttpRequest物件和SOAP
SOAP應用程式的架構 • SOAP應用程式架構需要在用戶端送出HTTP請求到伺服端,擁有用戶端和伺服端兩個應用程式,其檔案如下表所示:
HttpRequest物件和SOAP • MSXML剖析器的HttpRequest物件可以直接在用戶端建立HTTP請求和回應,其架構如下圖所示:
16-4 WSDL的基礎 • SOAP應用程式如何使用WSDL • 定義Web Service • 定義Web Service傳送的訊息 • 定義RPC呼叫的輸入與輸出訊息
SOAP應用程式如何使用WSDL-1 • 「WSDL」(Web Services Description Language)屬於一種以XML為基礎語言,它是用來定義Web Service和描述如何使用此Web Service服務的語言。 • Web Service是使用SOAP作為資料傳遞的通訊協定,而SOAP應用程式可以透過WSDL檔案的內容知道Web Service的位置、提供的RPC、訊息格式和如何使用這些函數呼叫。
SOAP應用程式如何使用WSDL-2 • 用戶端首先取得WSDL檔案,可能儲存在本機或是Web Service所在的伺服器,在取得WSDL檔案後,就可以知道Web Service提供的服務和如何使用它(這就是SOAP訊息的格式),現在我們就可以使用此Web Sevice,在傳送SOAP請求後,就可以等待SOAP回應的結果。
定義Web Service <definitions name="urn:GoogleSearch" targetNamespace="urn:GoogleSearch" xmlns:typens="urn:GoogleSearch" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> ………… <service name="GoogleSearchService"> <port name="GoogleSearchPort" binding="typens:GoogleSearchBinding"> <soap:address location="http://api.google.com/search/beta2"/> </port> </service> </definitions>
定義Web Service傳送的訊息 <message name="doGoogleSearch"> <part name="key" type="xsd:string"/> <part name="q" type="xsd:string"/> <part name="start" type="xsd:int"/> <part name="maxResults" type="xsd:int"/> <part name="filter" type="xsd:boolean"/> <part name="restrict" type="xsd:string"/> <part name="safeSearch" type="xsd:boolean"/> <part name="lr" type="xsd:string"/> <part name="ie" type="xsd:string"/> <part name="oe" type="xsd:string"/> </message>
定義Web Service傳送的訊息 <message name="doGoogleSearch"> <part name="key" type="xsd:string"/> <part name="q" type="xsd:string"/> <part name="start" type="xsd:int"/> <part name="maxResults" type="xsd:int"/> <part name="filter" type="xsd:boolean"/> <part name="restrict" type="xsd:string"/> <part name="safeSearch" type="xsd:boolean"/> <part name="lr" type="xsd:string"/> <part name="ie" type="xsd:string"/> <part name="oe" type="xsd:string"/> </message>
定義RPC呼叫的輸入與輸出訊息 • 在定義好SOAP請求和回應的訊息後,我們需要指定RPC呼叫的輸入與輸出訊息,WSDL使用protType元素定義每一個RPC呼叫操作的輸入與輸出訊息,如下所示: <portType name="GoogleSearchPort"> ……… <operation name="doGoogleSearch"> <input message="typens:doGoogleSearch"/> <output message="typens:doGoogleSearchResponse"/> </operation> </portType>
16-5 Google 搜尋服務的 Web Service • 申請Google的搜尋服務 • 使用Google搜尋服務的Web Service
申請Google的搜尋服務 • 申請Google會員 • Google 會員是一種免費服務,請在 Google 網站的新帳號網頁申請會員。 • 取得Web Service的授權碼 • 在申請好 Google 會員且啟動帳號後,就可以申請 Web Service 的授權碼。 • 取得GoogleSearch.wsdl • ASP.NET程式範例是Google搜尋服務的用戶端程式,我們需要取得GoogleSearch.wsdl的WSDL檔案和C#類別榴,相關檔案是位在Google Web API。
使用Google搜尋服務的Web Service-1 • 取得Web Service的C#類別檔 • 在googleapi.zip檔案就擁有C#類別檔,請解開此檔案,在「googleapi\dotnet\CSharp\Web References\Google」資料夾下,就可以看到GoogleSearch.wsdl和Reference.cs兩個檔案。 • 在ASP.NET程式使用Web Service的C#類別檔案 • 將C#類別檔案視為ASP.NET的外部類別檔案即可,如下所示: <%@ Page language="vb" Src="Reference.cs"%>
使用Google搜尋服務的Web Service-2 • 在ASP.NET程式以VB.NET語法來使用Web Service,首先匯入所需的名稱空間,如下所示: <%@ Import Namespace="Google_Web_APIs_Demo.Google" %> • 在名稱空間後,Google的Web Service就是建立GoogleSearchService物件,如下所示: Dim objGoogle As GoogleSearchService = New GoogleSearchService()
使用Google搜尋服務的Web Service-3 • 建立GoogleSearchService物件後,使用doGoogleSearch方法取得Google的搜尋結果的GoogleSearchResult物件,如下所示: Dim objResult As GoogleSearchResult = objGoogle.doGoogleSearch( _ GoogleKey, searchText, recordNo, PageSize, False, "", False, "", "", "")
使用Google搜尋服務的Web Service-4 • 傳回值是GoogleSearchResult物件,其相關屬性,如下表所示:
使用Google搜尋服務的Web Service-5 • resultElements屬性能夠取得查詢結果的網站資料,每一個網站是一個ResultElement物件,可以使用For迴路取得每一個物件,如下所示: For i = 0 To objResult.resultElements.GetUpperBound(0) objResult.resultElements(i).summary.ToString() objResult.resultElements(i).URL.ToString() ………… Next
使用Google搜尋服務的Web Service-6 • ResultElement物件可以使用其屬性取得相關資料,如下表所示: