一步一步学WCF--WCF初览

最近打算学习WCF,从图书馆借了一本WCF中口碑很不错的书《WCF服务编程》,虽然不知道是不是适合初学者,但还是坚持着看下去。

  • 什么是WCF


Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分,由 .NET Framework3.0 开始引入,与 Windows Presentation Foundation及 Windows Workflow Foundation并行为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库。

WCF的绝大部分功能都包含在一个单独的程序集System.ServiceModel.dll中,命名空间是System.ServiceModel。

 

  • 什么是服务

服务是一组公开的功能集合。面向服务(Service-Orientation,SO)是一组原则的抽象,是创建面向服务应用程序的最佳实践。面向服务的应用程序将众多服务聚集到一个单一逻辑的应用程序中,这就类似于面向组件的应用程序聚合组件,或者面向对象的应用程序聚合对象。服务可以是本地的也可以是远程的,可以由多个用任意技术进行开发的个体开发而成的。服务既可以在版本间相互独立,也可以在不同的时区同时进行。

  • 服务的执行边界


WCF不允许客户端直接与服务交互。相反,客户端总是使用代理(proxy)将调用转发给服务。代理公开的操作与服务相同,同时还增加了一些管理代理的方法。

  • 地址

在WCF中,每一个服务都有唯一的地址。地址包含两个重要的元素:服务位置及传输协议或者是传输样式。服务位置包括目标机器名、站点、通信端口、管道以及一个可选的特定路径或URI。

地址通信采用以下格式:[基地址]/[可选的URI]

基地址采用以下格式:[传输协议]://[机器名或域名]:[可选端口]

  • 契约

WCF的所有服务都会公开为契约。契约与平台无光,是描述服务功能的标准方式。WCF定义的契约有以下四种类型:

服务契约(Service Contract):服务契约描述了客户端能够执行的服务操作。

数据契约(Data Contract):数据契约定义了与服务交互的数据类型。WCF把内建类型的隐式定义为数据契约,如Int和String。

错误契约(Fault Contract):错误契约定义了服务抛出的错误,以及服务处理错误和传递错误到客户端的方式。

消息契约(Message Contract):消息契约允许服务直接与消息交互,可以是类型化的,也可以是非类型化的。

  • 托管

WCF服务类不能凭空存在。每个WCF服务都必须托管(host)在WIndows进程中,该进程称为宿主进程(host process)。单个宿主进程可以托管多个服务,而相同的服务类型也可以托管在多尔衮宿主进程中。宿主可以由Internet信息服务(IIS)提供,也可以由Windows Vista、Windows Server 2008 Win7等的Windows激活服务提供。

宿主进程必须在运行时明确地注册服务类型,同时为客户端的调用打开宿主,这就是要求宿主进程在客户端调用达到之前运行的原因。

在创建ServiceHost对象时,需要为ServiceHost的构造函数提供服务类型,可选默认的基地址。每个ServiceHost实例都与特定的服务类型相关,如果宿主进程需要运行多个服务类型,则必须创建与之匹配的多个ServiceHost实例。

  • 绑定

一个绑定封装了诸如传输协议、消息编码、通信模式、可靠性、安全性、事务传播、以及互操作性等相关选项,使得它们保持一致。

WCF定义了常用的五种绑定。

基本绑定:对应于BasicHttpBinding类。基本绑定能够将WCF服务公开为传统的ASMXWeb服务,使得原客户端能够与新的服务协作。基本绑定使得服务看起来像是一个传统的Web服务,能够基于基本的Web服务信息进行通信。

TCP绑定:对应于NetTcpBinding类。TCP绑定使用TCP协议实现在Internet中跨机器的通信。前提是它要求客户端与服务都必须使用WCF。

IPC绑定:对应于WSHttpBinding类。它使用命名管道为同一机器通信进行传输。这种绑定方式最为安全,因为它不能接收来自机器外部的调用。

Web服务(WS)绑定:对应于WSHttpBinding类。WS绑定使用HTTP或HTTPS进行传输,为基于Internet的通信提供了多种特性。

MSMQ绑定:对应于NetMsmqBinding类,它使用MSMQ进行传输,用于支持断开的队列调用。

  • 终结点(Endpoints)

终结点就是地址、契约与绑定的混合品。每一个终结点都包含了三个元素,而宿主则负责公开终结点。每个服务至少必须公开一个业务终结点,每个终结点有且只能拥有一个服务契约。服务上的所有终结点都包含唯一的地址,而一个单独的服务则可以公开多个终结点。

  • 元数据交换(Metdata Exchagne)

有两种方式可以发布服务的元数据:一种是基于HTTP-Get协议提供元数据,它是一种绝大多数平台都能支持简单的text-based协议;另一种则是后面将要讨论的使用专门的终结点方式提供元数据。

  • 客户端编程

若要调用服务的操作,则客户端首先要导入服务契约到客户端的本地描述中。如果客户端使用了WCF,调用操作的常见做法是使用代理。代理是一个CLR类,它公开了一个单独的CLR接口用于表示服务契约。

 

第一章有很多具体实例,我就不一一发表出来,这一次的日志仅仅是把WCF编程中几个重要的概念和组成部分列举出来,每一个都有很深的内容。我想一个个的解决掉之后,WCF至少入门应该是能算了。明天末日,劫后余生的话一定好好加油!

posted @ 2012-12-20 23:24  Nobodybing  阅读(165)  评论(0编辑  收藏  举报