Download presentation
Presentation is loading. Please wait.
1
第16章 Web Service應用程式架構 16-1 Web Service應用程式架構 16-2 SOAP的基礎
16-3 HttpRequest物件建立SOAP應用程式 16-4 WSDL的基礎 16-5 Google搜尋服務的Web Service
2
16-1 Web Service應用程式架構 Web Service的基礎 Web Service應用程式架構
3
Web Service的基礎-1 Web Service屬於一種企業級的應用程式,可以透過Internet建立自動機制提供資料交換和工作分享等資源共享的功能。 Web Service使用簡單和公開標準的協定,提供低成本的軟體整合和資料分享,它是一種可以在不同的作業系統,使用不同的程式語言開發的應用程式,能夠直接與位在不同位置的其它應用程式進行通訊和資料交換。
4
Web Service的基礎-2 Web Service應用程式提供一組通用服務,可以同時提供多個用戶端(Client)使用,這是一組使用XML格式作為傳遞訊息的函數呼叫,用戶端透過HTTP傳送函數呼叫給伺服端,伺服端以HTTP將結果傳回給用戶端,它提供用戶端更多的彈性,因為可以只使用所需的函數呼叫取得所需的資訊。
5
Web Service應用程式架構-1 Web Service基本上是提供一組通用的遠端函數呼叫(RPC,Remote Procedure Calls),為了用戶端和伺服端能夠依據相同的訊息格式和規格來傳遞資訊,我們需要一種標準的通訊協定,這就是「SOAP」(Simple Object Access Protocol),它是一種結合XML格式的訊息和HTTP協定的通訊協定,使用SOAP的Web Service應用程式架構。
6
Web Service應用程式架構-2
7
16-2 SOAP的基礎 什麼是SOAP SOAP訊息的基本語法 SOAP訊息交換架構
8
什麼是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架構的主要元素,提供分散式應用程式系統開發的資料交換。
9
什麼是SOAP-2 目前Internet服務或瀏覽程式都是支援HTTP,分散式Internet應用程式雖然能夠使用「RPC」(Remote Procedure Calls)執行DCOM物件,但是HTTP通訊協定並不支援RPC,此時的SOAP通訊協定就可以解決這個問題,其特點如下所示: SOAP是一種負載很輕的通訊協定,傳送的資料是文字內容的XML文件。 SOAP屬於一種在應用程式間使用HTTP通訊協傳遞資料的協定。 SOAP是一種XML基礎的技術,簡單而且擁有很好的擴充性。
10
SOAP訊息的基本語法-1 <SOAP-ENV:Envelope
xmlns:SOAP-ENV=" SOAP-ENV:encodingStyle=" <SOAP-ENV:Header> <t:Transaction xmlns:t=" SOAP-ENV:mustUnderstand="1"> 5 </t:Transaction> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:getPrice xmlns:m=" <code>1234</code> </m:getPrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
11
SOAP訊息的基本語法-2 SOAP的名稱空間
SOAP應用程式產生的SOAP訊息需要定義所有元素和屬性的名稱空間,而且SOAP應用程式一定要能夠處理收到訊息的名稱空間,SOAP擁有兩個預設的名稱空間,如下所示: SOAP Envelope預設的名稱空間,使用的字頭為【SOAP-ENV】,如下所示: SOAP加碼和資料型態預設的名稱空間,如下所示:
12
SOAP訊息的基本語法-3 Envelope元素
Envelope元素為SOAP訊息的根元素,SOAP訊息一定擁有此元素,如果元素包含名稱空間宣告和額外的屬性,屬性也需要使用名稱空間的字頭。 encodingStyle屬性是一組URI用來定義SOAP加碼和資料型態,這個屬性能夠出現在SOAP訊息的任何元素,如果在Envelope元素,此時所有的子元素都屬於名稱空間的範圍。
13
SOAP訊息的基本語法-4 Header元素
Header元素屬於SOAP訊息的選項元素,如果出現,一定為Envelope元素的子元素,這是一個彈性機制可以擴充SOAP訊息成為一個分散式的模組,常常使用在授權、交易和付款管理。 Header元素的子元素一定需要宣告名稱空間和字頭,可以使用兩個屬性,如下表所示:
14
SOAP訊息的基本語法-5 Body元素 Body元素屬於SOAP訊息的主要元素,這是Envelope元素的子元素,如果擁有Header元素,Body元素必為Header元素的下一個元素,它的內容是傳送的訊息,可以包含RPC呼叫,如下所示: <m:getPrice xmlns:m=" <code>1234</code> </m:getPrice>
15
SOAP訊息交換架構 SOAP訊息基本屬於單向的資料傳遞,可以從用戶端到伺服端使用HTTP送出請求訊息,在伺服器處理後將結果使用HTTP回應到用戶端,如下圖所示:
16
HTTP請求的SOAP訊息 POST /BookDetail HTTP/1.1 Host: www.company.com
Content-Type: text/xml; charset="Big5" Content-Length: nnnn SOAPAction: " <SOAP-ENV:Envelope xmlns:SOAP-ENV=" SOAP-ENV:encodingStyle=" <SOAP-ENV:Body> <m:getBookDetail xmlns:m=" <code>F8915</code> </m:getBookDetail> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
17
HTTP回應的SOAP訊息 HTTP/1.1 200 OK Content-Type: text/xml; charset="Big5"
Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV=" SOAP-ENV:encodingStyle=" <SOAP-ENV:Body> <m:getBookDetailResponse xmlns:m=" <book code="F8915"> <title>ASP網頁製作徹底研究</title> <author>陳會安</author> <price>580</price> </book> </m:getBookDetailResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
18
16-3 HttpRequest物件建立SOAP應用程式
SOAP應用程式的架構 HttpRequest物件和SOAP
19
SOAP應用程式的架構 SOAP應用程式架構需要在用戶端送出HTTP請求到伺服端,擁有用戶端和伺服端兩個應用程式,其檔案如下表所示:
20
HttpRequest物件和SOAP MSXML剖析器的HttpRequest物件可以直接在用戶端建立HTTP請求和回應,其架構如下圖所示:
21
16-4 WSDL的基礎 SOAP應用程式如何使用WSDL 定義Web Service 定義Web Service傳送的訊息
定義RPC呼叫的輸入與輸出訊息
22
SOAP應用程式如何使用WSDL-1 「WSDL」(Web Services Description Language)屬於一種以XML為基礎語言,它是用來定義Web Service和描述如何使用此Web Service服務的語言。 Web Service是使用SOAP作為資料傳遞的通訊協定,而SOAP應用程式可以透過WSDL檔案的內容知道Web Service的位置、提供的RPC、訊息格式和如何使用這些函數呼叫。
23
SOAP應用程式如何使用WSDL-2 用戶端首先取得WSDL檔案,可能儲存在本機或是Web Service所在的伺服器,在取得WSDL檔案後,就可以知道Web Service提供的服務和如何使用它(這就是SOAP訊息的格式),現在我們就可以使用此Web Sevice,在傳送SOAP請求後,就可以等待SOAP回應的結果。
24
定義Web Service <definitions name="urn:GoogleSearch"
targetNamespace="urn:GoogleSearch" xmlns:typens="urn:GoogleSearch" xmlns:xsd=" xmlns:soap=" xmlns:soapenc=" xmlns:wsdl=" xmlns=" ………… <service name="GoogleSearchService"> <port name="GoogleSearchPort" binding="typens:GoogleSearchBinding"> <soap:address location=" </port> </service> </definitions>
25
定義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>
26
定義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>
27
定義RPC呼叫的輸入與輸出訊息 在定義好SOAP請求和回應的訊息後,我們需要指定RPC呼叫的輸入與輸出訊息,WSDL使用protType元素定義每一個RPC呼叫操作的輸入與輸出訊息,如下所示: <portType name="GoogleSearchPort"> ……… <operation name="doGoogleSearch"> <input message="typens:doGoogleSearch"/> <output message="typens:doGoogleSearchResponse"/> </operation> </portType>
28
16-5 Google 搜尋服務的 Web Service
29
申請Google的搜尋服務 申請Google會員 取得Web Service的授權碼 取得GoogleSearch.wsdl
ASP.NET程式範例是Google搜尋服務的用戶端程式,我們需要取得GoogleSearch.wsdl的WSDL檔案和C#類別榴,相關檔案是位在Google Web API。
30
使用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"%>
31
使用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()
32
使用Google搜尋服務的Web Service-3
建立GoogleSearchService物件後,使用doGoogleSearch方法取得Google的搜尋結果的GoogleSearchResult物件,如下所示: Dim objResult As GoogleSearchResult = objGoogle.doGoogleSearch( _ GoogleKey, searchText, recordNo, PageSize, False, "", False, "", "", "")
33
使用Google搜尋服務的Web Service-4
傳回值是GoogleSearchResult物件,其相關屬性,如下表所示:
34
使用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
35
使用Google搜尋服務的Web Service-6
ResultElement物件可以使用其屬性取得相關資料,如下表所示:
Similar presentations