分享
 
 
 

VB.NET与WEB服务器通讯过程详解

王朝c#·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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是不是免费;)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有