Microsoft .NET 框架提供 Internet 服务的分层的、可扩展的和托管的实现,您可以将这些 Internet 服务快速而轻松地集成到您的应用程序中。您的应用程序可建立在可插接式协议的基础之上以便自动利用新的 Internet 协议,或者它们可以使用 Windows 套接字接口的托管实现来使用套接字级别上的网络。
介绍可插接式协议
Microsoft .NET 框架提供分层的、可扩展的和托管的 Internet 服务实现,您可以将它们快速而轻松地集成到您的应用程序中。System.Net 和 System.Net.Sockets 命名空间中的 Internet 访问类可用于实现基于 Web 和基于 Internet 的应用程序。
Internet 应用程序
Internet 应用程序大体上分为两类:客户端应用程序(请求信息)和服务器应用程序(响应来自客户端的信息请求)。典型的 Internet 客户端-服务器应用程序是万维网 (World Wide Web),在万维网中,人们使用浏览器来访问世界各地的 Web 服务器上存储的文档和其他数据。
应用程序并不限于仅充当其中的一个角色;例如,大家所熟悉的中间层应用程序服务器通过请求其他服务器的数据来响应客户端的请求,在这种情况中,它既作为服务器,也作为客户端。
客户端应用程序通过标识所请求的 Internet 资源以及用于该请求和响应的通讯协议来发出请求。如有必要,客户端还提供完成请求所需的任何附加数据,例如代理位置或身份验证信息(用户名、密码等)。只要构成了请求,就可以将该请求发送到服务器。
标识资源
.NET 框架使用统一资源标识符 (URI) 来标识所请求的 Internet 资源和通讯协议。URI 至少由三个(也可能是四个)片段组成:方案标识符(标识用于请求和响应的通讯协议)、服务器标识符(由域名系统 (DNS) 主机名或 TCP 地址组成,用于唯一标识 Internet 上的服务器)、路径标识符(定位服务器上请求的信息)以及可选的查询字符串(将信息从客户端传送到服务器)。例如,URI“http://www.contoso.com/whatsnew.aspx?date=today”就是由方案标识符“http”、服务器标识符“www.contoso.com”、路径“whatsnew.aspx”和查询字符串“?date=today”组成的。
只要服务器接收到请求并进行了响应,它就将该响应返回到客户端应用程序。响应包括补充信息,例如内容的类型(如原始文本或 XML 数据)。
.NET 框架中的请求和响应
.NET 框架使用特定类来提供通过请求/响应模型访问 Internet 所需的三部分信息:Uri 类(包含您要查找的 Internet 资源的 URI)、WebRequest 类(包含对该资源的请求)以及 WebResponse 类(为传入的响应提供容器)。
客户端应用程序通过将网络资源的 URI 传递到 WebRequest.Create 方法来创建
WebRequest 实例。此静态方法创建特定协议(例如 HTTP)的
WebRequest 实例。返回的
WebRequest 实例提供对属性的访问,这些属性既控制对服务器的请求,又控制对建立请求时发送的数据流的访问。
WebRequest 实例上的 GetResponse 方法将来自客户端应用程序的请求发送到在 URI 中标识的服务器。在响应可能被延迟的情况下,可以使用
WebRequest 实例上的 BeginGetResponse 方法异步建立请求,并且可以使用 EndGetResponse 方法在以后返回响应。
GetResponse 和
EndGetResponse 方法返回一个
WebResponse 实例,该实例提供对服务器返回的数据的访问。因为此数据由 GetResponseStream 方法作为流提供给发出请求的应用程序,所以它可以在应用程序中的使用数据流的任何地方使用。
WebRequest 类和
WebResponse 类是可插接式协议的基础——这是一种网络服务的实现,该实现使您可以在开发使用 Internet 资源的应用程序时,无需担心每一资源使用的协议的特定详细信息。用
WebRequest 类注册
WebRequest 的子代类可以管理有关建立与 Internet 资源的实际连接的详细信息。
举例来说,HttpWebRequest 类管理有关使用 HTTP 连接到 Internet 资源的详细信息。默认情况下,当
WebRequest.Create 方法遇到以“http:”或“https:”(HTTP 和安全 HTTP 的协议标识符)开头的 URI 时,返回的
WebRequest 实例可以按照原样使用,或者可以被类型转换为
HttpWebRequest 以访问协议特定的属性。在大多数情况下,
WebRequest 实例提供建立请求所必需的所有信息。
可被表示为请求/响应事务的所有协议都可以在
WebRequest 中使用。您可以从
WebRequest 和
WebResponse 导出协议特定的类,然后通过静态 WebRequest.RegisterPrefix 方法注册它们以供应用程序使用。
当要求 Internet 请求的客户端验证时,
WebRequest 的 Credentials 属性提供必需的凭据。这些凭据可以是用于基本 HTTP 或简要身份验证的简单名称/密码对,或者是用于 NTLM 或 Kerberos 身份验证的名称/密码/域组。一组凭据可以存储在 NetworkCredentials 实例中,或者多组凭据可以同时存储在 CredentialCache 实例中。
CredentialCache 使用该请求的 URI 和服务器支持的身份验证方案来确定哪些凭据将发送到服务器。
通过 WebClient 进行简单请求
对于需要建立用于 Internet 资源的简单请求的应用程序而言,WebClient 类提供将数据上载到 Internet 服务器或从 Internet 服务器下载数据的公共方法。
WebClient 依赖
WebRequest 类来提供对 Internet 资源的访问;因此,
WebClient 类可以使用任何注册的可插接式协议。
对于不能使用请求/响应模型的应用程序而言,或者对于需要侦听网络并发送请求的应用程序而言,
System.Net.Sockets 命名空间提供 TCPClient 类、TCPListener 类和 UDPClient 类。这些类处理使用不同的传输协议建立连接的详细信息,并且作为流向应用程序公开网络连接。
对于熟悉 Windows 套接字接口的开发人员或者需要通过在套接字级别编程所提供的控制的开发人员,他们将发现
System.Net.Sockets 类可以满足他们的需要。System.Net.Sockets 类是从托管到 System.Net 类中本机代码的转换点。在大多数情况下,System.Net.Sockets 类将数据封送到其 Windows 32 位副本中,以及处理任何必需的安全检查。
请求数据
开发在当今的 Internet 分布式操作环境中运行的应用程序要求采用高效、易用的方法检索所有类型资源的数据。可插接式协议令您可以开发使用单个接口检索来自多个 Internet 协议的数据的应用程序。
对于简单请求和响应事务,WebClient 类提供将数据上载到 Internet 服务器或从 Internet 服务器下载数据的最简便的方法。
WebClient 提供上载和下载文件、发送和接收流以及将数据缓冲区发送到服务器并接收响应的方法。
WebClient 使用 WebRequest 类和 WebResponse 类来建立与 Internet 资源的实际连接,以便注册的所有可插接式协议都可供使用。以下示例请求 Web 页并在流中返回结果。
[C#]
WebClient myClient = new WebClient();
Stream response = myClient.OpenRead("http://www.contoso.com/index.htm");
// The stream data is used here.
response.Close();
需要进行更复杂的事务处理的客户端应用程序使用
WebRequest 类及其子代来请求服务器中的数据。
WebRequest 封装连接到服务器、发送请求并接收响应的详细信息。
WebRequest