国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

網上下載和上傳數據(二) Montaque(原作)

2024-07-21 02:21:59
字體:
來源:轉載
供稿:網友
網上下載和上傳數據(二)    montaque(原作)  
  
上一次介紹了webclient的一些下載和上傳數據的方法,今天著重看一下webrequest 和 webresponse兩種我們訪問internet常用的類,嚴格說,webrequest是一個抽象基類,我們一般用它的衍生類httpwebrequest 以及 filewebrequest,ftp的訪問需要手動注冊,具體看后面的插入協議。

從邏輯角度上講,net classes 包含三個層:請求/響應層、應用協議層和傳輸層,依次展開,從應用程序到網絡。webrequest 和 webresponse 類代表請求/響應層。http、tcp 和 udp 類組成了應用協議層,而套接字存在于傳輸層中。webrequest/webresponse 和 http 可以在 system.net 名稱空間中找到,而 tcp/udp 和套接字則處在 system.net.sockets 名稱空間中,包括也常用的udpclient、tcpclient。

webrequest 和 webresponse(請求/響應模型)

請求/響應模型位于頂部,提供一種簡單的方式訪問 web 上的資源。webrequest 是 .net 框架的用于訪問 internet 數據的請求/響應模型的抽象基類。使用該請求/響應模型的應用程序可以用協議不可知的方式從 internet 請求數據,什么意思?就是協議不具體。

這兩種類提供了一種訪問網上資源的一般方式。webrequest 表示一個網絡請求,包含諸如 requesturi、headers、credentials 和 contenttype 等屬性。webrequest 上的主要方法有 getrequeststream、getresponse 以及它們的異步方法begin/endgetrequeststream 和 begin/endgetresponse。 getrequeststream 用于獲取流以便將數據上載到服務器。getresponse 用于獲取服務器返回的響應對象。webresponse 表示從處理該請求的服務器接收回的響應。其關鍵屬性有 contentlength、contenttype、headers、responseuri 和 status。webresponse 上最常用的方法是 getresponsestream,它用于從服務器讀取(下載)數據。  

當對 webrequest.getresponse 進行調用時,通常發出實際的網絡請求。

這個示例顯示如何獲取一個 web 頁并將其內容輸出:

dim url as new uri("http://www.yahoo.com")  ‘定義一個uri

dim req as webrequest

req = webrequest.create(url)

dim resp as webresponse

try

resp = req.getresponse ‘獲得一個響應

catch exc as exception

msgbox(exc.message)

end try

dim netstream as streamreader

netstream = new streamreader(resp.getresponsestream)

debug.writeline(netstream.readtoend)

當然,上面的例子只是一個簡單的操作,可以返回一個流式的數據。下面充分挖掘一下它們的優勢(與webclient相比)。

可插入協議

當某個應用程序僅僅使用 webrequest 和 webresponse 類時,無需修改應用程序的任何代碼就可以“插入”和使用新的協議。注冊一個帶 webrequestfactory 的 uri 模式在程序的持續時間內插入協議支持。注冊是通過調用 webrequestfactory.register() 方法完成的。對于 http 協議,這種方法是從內部調用的,因此它被默認注冊;盡管如此,在將來可以實現和注冊任意數目的其他協議。當然,由于 internet 上的協議數量巨大,這種模型并不是對所有的情況都理想。那些“饒舌”的或另外排斥請求/響應模型的協議可能會在 tcp 或 udp 類中更好地執行,或者在某些情況下會在 sockets 類中更好地執行。有關http方面的操作我們可以使用httpwebrequest。

下面說明幾個具體問題:

1. 程序分塊

當應用程序需要發送或接收數據,而數據的準確大小在下載/上載開始時還未知時,程序分塊是有用的。當基于其他應用程序或服務器邏輯正在創建所討論的數據時,使用程序分塊技術是最普遍的。要發送分塊的數據,應該將 webrequest 轉換為 httpwebrequest 并且將 httpwebrequest.sendchunked 的屬性設置為true。如果直接用httpwebrequest自然就免了:)

2.http 管道技術

管道技術是 http 1.1 的一項功能,它允許 net classes 通過持久性連接向后端服務器發送多個 http 請求,而無需在發出下次請求之前等待來自服務器的響應。這會顯著影響性能,因為從服務器請求多個資源的應用程序不會被阻塞而等待某個特定資源(可能是服務器上一個非常耗時的操作,如數據庫查找)。

3. 身份驗證
net classes 支持各種客戶機身份驗證機制,包括“摘要”、“基本”、kerberos、ntlm 和“定制”。身份驗證是通過在作出請求前對 webrequest.credentials 對象進行設置來達到的。在“摘要”和“基本”情況下,會指定用戶名和口令。對于 ntlm 或 kerberos,則使用 windows 安全機制,并且 credential 對象或者可以被設置為用戶名、口令和域的結合,或者可以請求使用系統默認值。

4.代理支持
在 net classes 中的 http 代理支持可以在每個請求的基礎上進行控制,或者可以一次全局性地設置它,用于應用程序的生存期。這樣似乎就可以驗證proxy是不是免費;)

總結:

    概述了一下訪問internet的另外一種方法,webresponse webrequest,以及采用它的一些優勢。具體例子和圖解參考:http://www.microsoft.com/china/msdn/library/techart/pdc_websvc.asp很不錯的一篇文章。


,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肃南| 扶绥县| 布尔津县| 宝山区| 天气| 衡阳县| 普定县| 哈巴河县| 临武县| 永善县| 屏东市| 登封市| 莒南县| 虎林市| 开化县| 九台市| 中宁县| 扶绥县| 大同市| 太保市| 赤壁市| 睢宁县| 巴南区| 鄯善县| 成安县| 四子王旗| 剑川县| 临潭县| 阿拉善右旗| 伊吾县| 洪湖市| 兴山县| 太原市| 海兴县| 巩留县| 汤阴县| 长泰县| 略阳县| 石柱| 兴义市| 双峰县|