.NET Framework 4.0_网络编程——可插入式协议
http://msdn.microsoft.com/en-us/library/kk8d8dz9(v=vs.100).aspx
本文内容
- Internet 应用程序
- 确定资源
- 请求和响应
- 用 WebClient 简单请求
本文事实上,就是网络编程,所谓“可插入式协议”是因为 .NET Framework 可以让你开发自己的协议,注册后就可以使用。
.NET Framework 提供一个分层的、可扩展的、可管理 Internet 服务的实现,可以快速、方便地集成到你的应用程序中。在 System.Net 和 System.Net.Sockets 命名空间中 Internet 访问类用来实现基于 Web 的应用程序和基于 Internet 的应用程序。
Internet 应用程序
Internet 应用程序大致分为两种:请求信息的客户端应用程序和响应来自客户端请求信息的服务端应用程序。典型的 Internet 客户端/服务器端应用程序就是万维网,人们使用浏览器访问文档,数据存储在世界各地的 Web 服务器上。
应用程序不会局限在一个角色。例如,中间层应用程序,响应客户端的请求和从另一个服务器请求数据,同时扮演服务端和客户端角色。
客户端应用程序通过确定请求的 Internet 资源以及用于响应和请求的通信协议作出请求。如有必要,客户端还提供任何额外的数据,以完成该请求,如代理位置或认证信息(用户名和密码等等)。一旦形成请求,可以把该请求发送到服务器。
确定资源
.NET Framework 使用统一资源标识符(Uniform Resource Identifier,URI)来确定请求的 Internet 资源和通信协议。URI 至少由三个部分,也可能四个组成:模式识别,用来确定请求和响应的通信协议;服务标识符号,由域名系统(DNS)主机名或 TCP 地址组成;路径标识,定位服务器上请求的信息;可选的查询连接字符串,用于从客户端传递信息到服务器。例如,URI 为 "http://www.contoso.com/whatsnew.aspx?date=today",其中,"http" 为模式标识;"www.contoso.com" 为服务标识;"/whatsnew.aspx" 为路径标识;"?date=today" 为查询字符串。
NET框架使用一个统一资源标识符(URI),以确定所请求的Internet资源和通信协议。URI由至少有三个,可能是四个片段:方案标识符,用于标识通信协议的请求和响应的服务器标识符,其中包含的域名系统(DNS)主机名或TCP地址唯一标识互联网上的服务器的路径标识符,在服务器上找到所需的信息,以及一个可选的查询字符串,从客户端传递信息到服务器。例如,的URI“http://www.contoso.com/whatsnew.aspx?date=today”的方案标识符“HTTP”,在服务器标识符“www.contoso.com”,路径为“/ whatsnew。 aspx“的查询字符串”日期=今天“。
服务器收到请求并处理响应后,返回响应给客户端应用程序。响应包括补充信息,如内容类型(例如,原始文本或 XML 数据)。
请求和响应
.NET Framework 使用特定的类通过请求/响应模型访问 Internet 资源提供所需要的信息,主要是三个类:Uri 类,包含你正在定位互联网资源的 Uri;WebRequest 类,包含一个对资源的请求;WebResponse 类,为到来的响应提供一个容器。
客户端应用程序通过把 Uri 传递给 Create 方法创建 WebRequest 实例。该静态方法创建一个特定协议的 WebRequest,如 HTTP。返回的 WebRequest 提供属性的问题,当作出请求时,同时控制对服务器的请求和对发送数据流的访问。WebRequest 的 GetResponse 方法从客户端应用程序发送请求给服务器。在响应被延迟的情况下,通过使用 BeginGetResponse 方法可以做异步请求,之后再使用 EndGetResponse 方法返回响应。
GetResponse 和 EndGetResponse 方法返回一个 WebResponse,提供了访问服务器返回的数据。而 GetResponseStream 方法由于提供一个流的数据,所以应用程序中任何使用数据流的地方都可以使用。
WebRequest 类和 WebResponse 是可插入式协议的基类 - 实现网络服务,可以让你开发使用网络资源的应用程序,而无需担心每个资源使用的协议的具体细节。WebRequest 的派生类会被 WebRequest 注册以管理对 Internet 资源真实连接的细节。
作为一个例子,HttpWebRequest 类管理使用 HTTP 连接一个 Internet 资源的细节。默认情况下,当 WebRequest.Create 方法遇到一个以 "http:" 或 "https:" 开头的 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 Sockets 接口,或是那些需要通过编程控制在套接字级别的人会发现,System.Net.Sockets 类满足他们的需求。System.Net.Sockets 类在 System.Net 类内一个可管理本地代码的过渡点。大多数情况下,System.Net.Sockets 类排队数据到它们的 Windows 32 位副本,以及处理任何必要的安全检查。