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

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

網(wǎng)上下載和上傳數(shù)據(jù)(二) Montaque(原作)

2024-07-21 02:28:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
網(wǎng)上下載和上傳數(shù)據(jù)(二)    montaque(原作)  
  
上一次介紹了webclient的一些下載和上傳數(shù)據(jù)的方法,今天著重看一下webrequest 和 webresponse兩種我們?cè)L問(wèn)internet常用的類,嚴(yán)格說(shuō),webrequest是一個(gè)抽象基類,我們一般用它的衍生類httpwebrequest 以及 filewebrequest,ftp的訪問(wèn)需要手動(dòng)注冊(cè),具體看后面的插入?yún)f(xié)議。

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

webrequest 和 webresponse(請(qǐng)求/響應(yīng)模型)

請(qǐng)求/響應(yīng)模型位于頂部,提供一種簡(jiǎn)單的方式訪問(wèn) web 上的資源。webrequest 是 .net 框架的用于訪問(wèn) internet 數(shù)據(jù)的請(qǐng)求/響應(yīng)模型的抽象基類。使用該請(qǐng)求/響應(yīng)模型的應(yīng)用程序可以用協(xié)議不可知的方式從 internet 請(qǐng)求數(shù)據(jù),什么意思?就是協(xié)議不具體。

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

當(dāng)對(duì) webrequest.getresponse 進(jìn)行調(diào)用時(shí),通常發(fā)出實(shí)際的網(wǎng)絡(luò)請(qǐng)求。

這個(gè)示例顯示如何獲取一個(gè) web 頁(yè)并將其內(nèi)容輸出:

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

dim req as webrequest

req = webrequest.create(url)

dim resp as webresponse

try

resp = req.getresponse ‘獲得一個(gè)響應(yīng)

catch exc as exception

msgbox(exc.message)

end try

dim netstream as streamreader

netstream = new streamreader(resp.getresponsestream)

debug.writeline(netstream.readtoend)

當(dāng)然,上面的例子只是一個(gè)簡(jiǎn)單的操作,可以返回一個(gè)流式的數(shù)據(jù)。下面充分挖掘一下它們的優(yōu)勢(shì)(與webclient相比)。

可插入?yún)f(xié)議

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

下面說(shuō)明幾個(gè)具體問(wèn)題:

1. 程序分塊

當(dāng)應(yīng)用程序需要發(fā)送或接收數(shù)據(jù),而數(shù)據(jù)的準(zhǔn)確大小在下載/上載開(kāi)始時(shí)還未知時(shí),程序分塊是有用的。當(dāng)基于其他應(yīng)用程序或服務(wù)器邏輯正在創(chuàng)建所討論的數(shù)據(jù)時(shí),使用程序分塊技術(shù)是最普遍的。要發(fā)送分塊的數(shù)據(jù),應(yīng)該將 webrequest 轉(zhuǎn)換為 httpwebrequest 并且將 httpwebrequest.sendchunked 的屬性設(shè)置為true。如果直接用httpwebrequest自然就免了:)

2.http 管道技術(shù)

管道技術(shù)是 http 1.1 的一項(xiàng)功能,它允許 net classes 通過(guò)持久性連接向后端服務(wù)器發(fā)送多個(gè) http 請(qǐng)求,而無(wú)需在發(fā)出下次請(qǐng)求之前等待來(lái)自服務(wù)器的響應(yīng)。這會(huì)顯著影響性能,因?yàn)閺姆?wù)器請(qǐng)求多個(gè)資源的應(yīng)用程序不會(huì)被阻塞而等待某個(gè)特定資源(可能是服務(wù)器上一個(gè)非常耗時(shí)的操作,如數(shù)據(jù)庫(kù)查找)。

3. 身份驗(yàn)證
net classes 支持各種客戶機(jī)身份驗(yàn)證機(jī)制,包括“摘要”、“基本”、kerberos、ntlm 和“定制”。身份驗(yàn)證是通過(guò)在作出請(qǐng)求前對(duì) webrequest.credentials 對(duì)象進(jìn)行設(shè)置來(lái)達(dá)到的。在“摘要”和“基本”情況下,會(huì)指定用戶名和口令。對(duì)于 ntlm 或 kerberos,則使用 windows 安全機(jī)制,并且 credential 對(duì)象或者可以被設(shè)置為用戶名、口令和域的結(jié)合,或者可以請(qǐng)求使用系統(tǒng)默認(rèn)值。

4.代理支持
在 net classes 中的 http 代理支持可以在每個(gè)請(qǐng)求的基礎(chǔ)上進(jìn)行控制,或者可以一次全局性地設(shè)置它,用于應(yīng)用程序的生存期。這樣似乎就可以驗(yàn)證proxy是不是免費(fèi);)

總結(jié):

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


,歡迎訪問(wèn)網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開(kāi)發(fā)。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湄潭县| 钟祥市| 宜昌市| 岱山县| 宜川县| 舞钢市| 诏安县| 华坪县| 新津县| 桐柏县| 泸水县| 霸州市| 虹口区| 灌南县| 鸡东县| 西青区| 曲松县| 临邑县| 辽宁省| 息烽县| 惠州市| 万荣县| 贺州市| 闻喜县| 达尔| 长岛县| 买车| 晋中市| 台安县| 上饶市| 绥宁县| 永兴县| 宁化县| 定结县| 保康县| 开阳县| 华阴市| 济阳县| 扶余县| 岑溪市| 大英县|