Web Service 編程第五章講稿.ppt_第1頁
Web Service 編程第五章講稿.ppt_第2頁
Web Service 編程第五章講稿.ppt_第3頁
Web Service 編程第五章講稿.ppt_第4頁
Web Service 編程第五章講稿.ppt_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Web Service 編程-C#.NET,第五章 Web Service基礎(chǔ),本章要點(diǎn),Web Service體系結(jié)構(gòu): Web Service是自包含模塊化的應(yīng)用程序,它可以在網(wǎng)絡(luò)(通常稱為Web)中被描述、發(fā)布、查找以及調(diào)用。 實(shí)例介紹:本章通過兩個(gè)實(shí)例的分析,幫助讀者及時(shí)應(yīng)用學(xué)習(xí)的知識(shí),更快更好地掌握Web Service的開發(fā)。,Web 服務(wù)簡介,Web 服務(wù)的定義 Web 服務(wù)是可以使用標(biāo)準(zhǔn) Internet 協(xié)議進(jìn)行訪問的可編程應(yīng)用程序邏輯 基于 Internet 技術(shù) 實(shí)現(xiàn)可以重復(fù)使用的黑匣功能 是未來分布式應(yīng)用程序的發(fā)展方向,XML Web Service的定義,XML We

2、b Service實(shí)現(xiàn)了在異類系統(tǒng)之間以 XML 消息的形式進(jìn)行數(shù)據(jù)交換 遠(yuǎn)程訪問數(shù)據(jù)和應(yīng)用程序邏輯并不是新的技術(shù),但以松耦合的方式執(zhí)行該操作卻是一個(gè)全新的概念 在客戶端和服務(wù)器之間要求接收方可以理解收到的消息,客戶端和服務(wù)器共同遵守一個(gè)協(xié)定(通常在 Web 服務(wù)中使用 WSDL 和 XSD),然后通過在指定的傳輸協(xié)議(例如 HTTP)之上生成遵守該協(xié)定的消息來進(jìn)行通信 使用文本格式(如 XML)的靈活性使消息交換隨時(shí)間的推移以一種松耦合的方式進(jìn)化成為可能,Web 服務(wù)的功能和優(yōu)點(diǎn),黑匣功能使用戶不需要了解服務(wù)具體是如何實(shí)現(xiàn)的 功能的粒度沒有限制,大型和小型系統(tǒng)都可以使用 既可以訪問靜態(tài)資源也

3、可以訪問動(dòng)態(tài)資源 便于和其他 Web 服務(wù)集成 平臺(tái)無關(guān),互操作性強(qiáng) 支持多種語言 把現(xiàn)有系統(tǒng)改造為 Web 服務(wù)比較容易 全部采用業(yè)界標(biāo)準(zhǔn)而不是廠商標(biāo)準(zhǔn),TCP/IP,System.Net.Sockets,Sockets,HTTP,XML or Binary Formats,SOAP,System.Net.Sockets,System.Net,System.Runtime.Remoting,System.Web.Services,Web 技術(shù)棧與 .NET,面向服務(wù)的體系結(jié)構(gòu),面向服務(wù)的體系結(jié)構(gòu)的組成部分,服務(wù)提供者 網(wǎng)絡(luò)中負(fù)責(zé)提供軟件服務(wù)接口、實(shí)現(xiàn)特定功能的節(jié)點(diǎn) 服務(wù)消費(fèi)者 網(wǎng)絡(luò)中使用服務(wù)

4、提供者定義的接口,實(shí)現(xiàn)業(yè)務(wù)解決方案的節(jié)點(diǎn) 服務(wù)代理 網(wǎng)絡(luò)中負(fù)責(zé)存儲(chǔ)服務(wù)描述,并幫助服務(wù)消費(fèi)者定位服務(wù)的節(jié)點(diǎn),各組成部分間的基本操作過程,服務(wù)的發(fā)布 服務(wù)提供者把服務(wù)發(fā)布到服務(wù)代理,包括服務(wù)接口定義、服務(wù)提供者位置以及其他相關(guān)文件 服務(wù)的查找 服務(wù)消費(fèi)者在服務(wù)代理那里查找需要的服務(wù) 服務(wù)的綁定 服務(wù)消費(fèi)者綁定由服務(wù)提供者提供的服務(wù),這個(gè)過程包括提供商對(duì)消費(fèi)者的身份驗(yàn)證,Web 服務(wù)體系結(jié)構(gòu)簡介,Web 服務(wù)是面向服務(wù)體系結(jié)構(gòu)的具體實(shí)現(xiàn),Web 服務(wù)體系結(jié)構(gòu)的組成部分,Web 服務(wù)的服務(wù)提供者 由 ASP.NET 頁面來實(shí)現(xiàn),擴(kuò)展名是 .asmx Web 服務(wù)的服務(wù)代理 UDDI 提供的目錄服務(wù)

5、Web 服務(wù)的服務(wù)消費(fèi)者 采用 SOAP 或 HTTP 協(xié)議與服務(wù)提供者進(jìn)行通信,并且支持必要的安全身份驗(yàn)證,Web 服務(wù)體系結(jié)構(gòu)中各部分的功能,Web 服務(wù)提供者 Web 服務(wù)消費(fèi)者 Web 服務(wù)代理,Web 服務(wù)提供者,Web 服務(wù) 可以運(yùn)行在 IIS Web 服務(wù)器上 .NET 公共語言運(yùn)行庫 Web 服務(wù)提供者的例子,IIS 與 Web 服務(wù),IIS 提供對(duì) HTTP 協(xié)議的偵聽 IIS 可以通過使用 ISAPI 體系結(jié)構(gòu)來同時(shí)提供多個(gè)獨(dú)立的 Web 服務(wù),其中ISAPI 起到分選器的作用,可以根據(jù)客戶端訪問文件的后綴名,將不同類型的請求定向到不同的應(yīng)用程序來進(jìn)行處理 IIS 有完整的

6、安全結(jié)構(gòu),可以提供身份驗(yàn)證和數(shù)據(jù)加密等多種安全服務(wù),Web 服務(wù)消費(fèi)者,最低功能要求 可以使用該服務(wù)支持的協(xié)議來調(diào)用服務(wù)提供者的 Web 服務(wù)接口 在消息發(fā)往服務(wù)提供者前進(jìn)行正確的格式化 服務(wù)定位 不使用硬編碼形式,可以動(dòng)態(tài)定位 代理 異步調(diào)用 消費(fèi)者在等待服務(wù)完成的 同時(shí)可以處理其他任務(wù) Web 服務(wù)消費(fèi)者的示例,代理的任務(wù),負(fù)責(zé)處理底層的協(xié)議 解析字節(jié)流以提取數(shù)據(jù) 驗(yàn)證入站數(shù)據(jù)流 構(gòu)造出站數(shù)據(jù)包,Web 服務(wù)代理,在提供商和代理之間完成的操作 對(duì) Web 服務(wù)進(jìn)行分類 提供 Web 服務(wù)的協(xié)定信息 提供 Web 服務(wù)的文本描述 提供 Web 服務(wù)的文檔鏈接 提供 Web 服務(wù)的定位信息 在

7、代理和消費(fèi)者之間完成的操作 最重要的功能就是實(shí)現(xiàn)查找 UDDI 注冊,UDDI 注冊包含的信息,Web 服務(wù)的位置、協(xié)定信息和標(biāo)識(shí)符 行業(yè)的分類信息 Web 服務(wù)的技術(shù)信息,Web 服務(wù)基礎(chǔ)結(jié)構(gòu),Web 服務(wù)編程模型,Web 協(xié)議 HTTP SOAP XML 無狀態(tài) 松耦合 通用數(shù)據(jù)格式 SOAP 協(xié)議基于 XML 格式 Web 服務(wù)描述文件使用 XML 格式 從 Web 服務(wù)返回的數(shù)據(jù)使用 XML 格式 UDDI 注冊 Web 服務(wù)使用 XML 格式的文檔 ASP.NET 使用 XML 格式的配置文件,HTTP 協(xié)議基本原理,HTTP 協(xié)議概述 HTTP 請求與HTTP響應(yīng)的結(jié)構(gòu) HTTP

8、的 GET 與 POST 方法,URL、URI 和 URN,URI,Uniform Resource Identifier 統(tǒng)一資源標(biāo)識(shí)符,用字符串惟一標(biāo)識(shí)信息資源 URL,Uniform Resource Locator 統(tǒng)一資源定位符,通過“通訊協(xié)議網(wǎng)絡(luò)地址”字符串惟一標(biāo)識(shí)信息位置和資源訪問途徑 URN,Uniform Resource Name 統(tǒng)一資源命名符,用于惟一標(biāo)識(shí)全球范圍內(nèi)由專門機(jī)構(gòu)負(fù)責(zé)的穩(wěn)定的信息資源,HTTP 協(xié)議概述,URL 結(jié)構(gòu) 無狀態(tài)協(xié)議 在客戶端發(fā)出 HTTP 請求并收到服務(wù)器端響應(yīng)后,連接就會(huì)斷開,下次的訪問與前一次的訪問無關(guān),因此如果需要維護(hù)客戶端的信息,必須在

9、服務(wù)器端維持狀態(tài)數(shù)據(jù),實(shí)例,http:/host:portpath?querystring,主機(jī),路徑,查詢字符串,HTTP 請求的結(jié)構(gòu),請求的結(jié)構(gòu),例子,POST /TheStockExchange/Trading/GetStockPrice.asp HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 11 Symbol=MSFT,注意空行,Method URL Version Headers Message body,注意空行,響應(yīng)的結(jié)構(gòu),例子,HTTP/1.1 2

10、00 OK Content-Type: text/xml; charset=utf-8 Content-Length: 75 ,HTTP 響應(yīng)的結(jié)構(gòu),注意空行,Version Status-Code Description Headers Message body,注意空行,HTTP 的 GET 和 POST 方法,HTTP-GET HTTP-POST,例子,例子,GET /Trading/GetStockPrice.asp?Symbol=MSFT HTTP/1.1 Host: localhost,POST /Trading/GetStockPrice.asp HTTP/1.1 Host: l

11、ocalhost Content-Type: application/x-www-form-urlencoded Content-Length: 11 Symbol=MSFT,GET 和 POST 方法的區(qū)別,GET 方法通常沒有消息主體 GET 方法支持最大1024個(gè)字節(jié)的查詢字符串,POST 方法沒有限制 POST 方法把查詢字符串放在消息主體中傳輸,因此比 GET 方法支持更多的數(shù)據(jù)類型,.NET 中與 HTTP 相關(guān)的類,HttpWebRequest 由 WebRequest 派生,封裝了對(duì)HTTP 協(xié)議的支持 HttpWebResponse 由 WebResponse 派生,封裝了對(duì)

12、 HTTP 協(xié)議的支持 支持同步和異步操作,HttpWebRequest HttpWebResponse,System.Web,System.IO,StreamReader StreamWriter,HttpWebRequest 類,HttpWebRequest不使用構(gòu)造函數(shù)來進(jìn)行初始化,而是調(diào)用 WebRequest 的 Create 方法 GetResponse 方法向 RequestUri 屬性中指定的 Internet 資源發(fā)出同步請求并返回包含該響應(yīng)的 HttpWebResponse 實(shí)例,可以使用 BeginGetResponse 和 EndGetResponse 方法向 Inte

13、rnet 資源發(fā)出異步請求 向 Internet 資源發(fā)送數(shù)據(jù)時(shí),GetRequestStream 方法返回用于發(fā)送數(shù)據(jù)的 Stream 實(shí)例,BeginGetRequestStream 和 EndGetRequestStream 方法提供對(duì)發(fā)送數(shù)據(jù)流的異步訪問,同步調(diào)用與異步調(diào)用,在 .NET Framework 指定的異步調(diào)用方法的設(shè)計(jì)模式中,每個(gè)同步方法都有兩個(gè)對(duì)應(yīng)的異步方法,即一個(gè) Begin 異步方法和一個(gè) End 異步方法 客戶端調(diào)用 Begin 方法啟動(dòng)該方法的異步調(diào)用,實(shí)質(zhì)是指示開始進(jìn)行方法調(diào)用,但立即返回,不需要等待結(jié)果 客戶端調(diào)用 End 方法獲取 XML Web Serv

14、ice 方法執(zhí)行的結(jié)果,1.HttpWebRequest req = (HttpWebRequest ) WebRequest.Create(url); 2.req.ContentType=contentType; 3.req.Method = method; 4.req.ContentLength=content.Length; 5.Stream s; 6.s = req.GetRequestStream(); 7.StreamWriter sw = new StreamWriter(s,Encoding.ASCII); 8.sw.Write(content); 9.sw.Close();

15、10. HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 11. s = res.GetResponseStream(); 12.StreamReader sr = new StreamReader(s,Encoding.ASCII); 13. StringBuilder sb = new StringBuilder(); 14. char data = new char1024; 15. int nBytes; 16. do nBytes = sr.Read(data,0,(int)1024); 17. sb.Append(d

16、ata); 18. while (nBytes = 1024);,下面的代碼是異步調(diào)用代碼實(shí)現(xiàn),1. public class Handler 2. 3. public void Callback(IAsyncResult ar) 4. HttpWebRequest req = (HttpWebRequest)ar.AsyncState; 5. HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(ar); 6. Stream s = res.GetResponseStream(); 7. StreamReader sr = new

17、 StreamReader(s,Encoding.ASCII); 8. StringBuilder sb = new StringBuilder(); 9.char data = new char1024; 10.int nBytes; 11.do 12. 13.nBytes = sr.Read(data,0,(int)1024); 14.sb.Append(data); 15. while (nBytes = 1024); 16. 17. 18.,1.Stream s; 2.HttpWebRequest req = (HttpWebRequest )WebRequest.Create(url

18、); 3.req.ContentType=contentType; 4.req.Method = method; 5.req.ContentLength=content.Length; 6.s = req.GetRequestStream(); 7.StreamWriter sw = new StreamWriter(s); 8.sw.Write(content); 9.sw.Close(); 10. Handler h = new Handler(); 11.AsyncCallback callback = new AsyncCallback(h.Callback) 12. req.Begi

19、nGetResponse(callback, req); 13. .,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,建立一個(gè)簡單的Web Service,客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)崿F(xiàn),客戶端程序?qū)?/p>

20、現(xiàn)之Web 服務(wù)代理,代理與 WSDL 運(yùn)用 Wsdl.exe 生成代理 配置代理,代理和 WSDL,使用代理的原因 可以使用行業(yè)標(biāo)準(zhǔn)協(xié)議(包括 SOAP)通過網(wǎng)絡(luò)與 Web 服務(wù)進(jìn)行通信。也就是說,客戶端和 Web 服務(wù)使用 SOAP 消息進(jìn)行通信,SOAP 消息將輸入和輸出參數(shù)封裝為 XML。但是這種編程手段非常復(fù)雜,對(duì)于 Web 服務(wù)消費(fèi)者來說,代理類處理將參數(shù)映射為 XML 元素,然后通過網(wǎng)絡(luò)發(fā)送 SOAP 消息,使用 Wsdl.exe 生成代理,調(diào)用 Wsdl.exe 的語法,wsdl options URL | Path,例子,例子,wsdl ,wsdl /l:VB /protoc

21、ol:HttpGet /out:Bank.vb ,Wsdl.exe 常用參數(shù),代理類,由 wsdl.exe 生成的代理類包含所有方法的同步和異步調(diào)用形式 代理類中的方法可以正確處理傳遞的消息 默認(rèn)情況下,代理類使用 SOAP 協(xié)議,但是有些 Web 服務(wù)只支持 HTTP 協(xié)議,必須在使用 wsdl.exe 時(shí)使用參數(shù)選定 HTTP 協(xié)議 代理類都是 HttpWebClientProtocol 類的派生類,配置代理,Url 屬性 用于修改 Web 服務(wù)的 URL,實(shí)現(xiàn)容錯(cuò)或者負(fù)載平衡的功能 Credentials 屬性 修改用于身份驗(yàn)證的消費(fèi)者憑據(jù) Timeout 屬性 修改同步調(diào)用連接超時(shí)的默

22、認(rèn)值,單位為毫秒 Proxy 屬性 使用其他代理配置替代系統(tǒng)默認(rèn)設(shè)置 AllowAutoRedirect 屬性 防止 Web 服務(wù)器向其他服務(wù)器提交用戶憑據(jù),使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 Wsdl.exe 生成代理示例,使用 SOAP 頭自定義身份驗(yàn)證,在 Web 服務(wù)中使用 SO

23、AP 頭 在一個(gè) Web 服務(wù)消費(fèi)者中使用 SOAP 頭,在 Web 服務(wù)中使用 SOAP 頭,在 Web 服務(wù)中使用 SOAP 頭代碼示例,using System.Web.Services; using System.Web.Services.Protocols; public class AuthHeader : SoapHeader public string Username; public string Password; public class AccountService : WebService public AuthHeader sHeader; WebMethod SoapHeader(sHeader) public decimal GetAcctBalance(string acctID) . ,紅色:第一步 綠色:第二步 藍(lán)色:第三步,修改配置使自定義身份驗(yàn)證模式生效,通過 SOAP 頭的設(shè)計(jì)可以實(shí)現(xiàn)自定義的身份驗(yàn)證模式,要讓這種模式生效還必須修改 web.config 文件, ,WSDL 中的 SOAP 頭 Web 服務(wù)代理類和 SOAP 頭 調(diào)用 Web 服務(wù)時(shí)使用 SOAP 頭,在 Web 服務(wù)消費(fèi)者

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論