《Programming WCF Services》第一章 WCF基础
第一章 WCF基础
本章主要介绍WCF的基本概念、构建模块以及WCF体系架构,以指导读者构建一个简单的WCF服务。从本单的内容中,我们可以了解到WCF的基本术语,包括地址(Address)、绑定(Binding)、契约(Contract)和终结点(Endpoint);了解如何托管服务,如何编写客户端代码;了解WCF的相关主题,诸如进程内托管(In-Proc Hosting)以及可靠性的实现;即使你已经熟知WCF基本概念,仍然建议你快速浏览本章内容,它不仅能够巩固你的已有知识,而且本章介绍的一些辅助类与技术术语将有助于你阅读全书。
- 什么是WCF
Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。正因为如此WCF才能够提供服务之间的互操作性。WCF的第一个版本为服务开发提供了许多有用的功能,包括(Hosting)、服务实例管理(Service Instance Management)、异步调用、可靠性、事务管理、离线队列调用(Disconnected Queued Call)以及安全性。同时,WCF还提供了设计优雅的可扩展模型,使开发人员能够丰富它的基础功能。事实上,WCF自身的实现正是利用了这样的一种可扩展型。本书的其余章节会专注于介绍诸多方面的内容与特征。WCF的大部分功能都包含在一个单独的程序集 System.ServiceModel.dll 中,命名空间为 System.ServiceModel 。
WCF是.NET3.0的一部分,同时需要 .NET2.0 的支持,因此它只能运行在支持它的操作系统上。这些操作系统包括 Windows Vista(客户端和服务器)、Windows XP SP2 和 Windows Server 2003 SP1 以及更新的版本。
- 服务
服务(Services)是公开的一组功能集合。从软件设计的角度考虑,软件设计思想经历了从函数发展到对象,从对象发展到组件,再从组件发展到服务的几次变迁。在这样一个漫长的旅程中,最后发展到服务的一步可以说是最具革新意义的一次飞跃。面向服务(Service-Orientation,SO)是一组原则对象,是创建面向服务应用程序的最佳实践。如果你不熟悉面向服务的原则,可以参见附录A,它介绍了使用面向服务的概况与目的。本书假定你对这些原则已经了然于胸。一个面向服务应用程序(SOA)将众多服务聚集到单个逻辑的应用程序中,这就类似于面向组件的应用程序聚合组件,或者面向对象的应用程序聚合对象,如图1-1所示。
图1-1:面向服务应用程序
服务可以是本地的,也可以是远程的,可以由多个参与方使用任意技术进行开发。服务与版本无关,甚至可以在不同的时区同时执行。服务内部包含了诸如语言、技术平台、版本与框架等诸多概念,而服务之间的交互,则只允许指定的通信模式。服务的客户端只是使用服务功能的一方。理论上讲,客户端可以是任意的Windows窗体类、ASP.NET页面或者其它服务。客户端与服务通过消息的发送与接收进行交互。消息可以直接在客户端与服务之间进行传递,也可以通过中间方进行传递。WCF中的所有消息均为SOAP消息。注意WCF的消息与传输协议无关,这与Web服务不同。因此,WCF服务可以在不同协议之间传输,而不仅限于HTTP。WCF客户端可以与非WCF服务完成互操作,而WCF服务也可以与非WCF客户端交互。不过,如果需要同时开发客户端与服务,而创建的应用程序两端都要求支持WCF,这样才能利用WCF的特定优势。
因为服务的创建对于外界而言是不透明的,所以WCF服务通常通过公开元数据(Metadata)的方式描述可用的功能以及服务可能采用的通信方式。元数据的发布可以预先定义,它与具体的技术无关(Technology-Neutral),例如采用基于 HTTP-GET 方式的WSDL,或者符合元数据交换的行业标准。一个非WCF客户端可以将元数据作为本地类型导入到本地环境中。相似的,WCF客户端也可以导入非WCF服务的元数据,然后以本地CLR类与接口的方式进行调用。
- 服务的执行边界
WCF不允许客户端直接与服务交互,即使它调用的是本地机器内在中的服务。相反,客户端总是使用代理直气壮(Proxy)将调用转发给服务。代理公开的操作与服务相同,同时还增加了一些管理代理的方法。
WCF允许客户端跨越执行边界与服务通信。在同一台机器中(参见图1-2),客户端可以调用同一个应用程序域中的服务,也可以在同一进程中跨应用程序域调用,甚至跨进程调用。
图1-2:使用WCF实现相同机器通信
图1-3 则展示了跨机器边界的通信方式,客户端可以跨越Interanet或Internet的边界与服务交互。
图1-3:使用WCF实现不同机器通信
- WCF与位置透明度
- 地址
WCF的每一个服务都具有一个唯一的地址(Address)。地址包含两个重要元素:服务位置与传输协议(Transport Protocol),或者是用于服务通信的传输样式(Transport Schema)。服务位置包括目标机器名、站点或网络、通信端口、管道或或队列,以及一个可选的特定路径或者URI。URI即统一资源标识(Universal Resource Identifier) 它可以是任意的唯一标识的字符串,例如服务名称或GUID。
WCF 1.0 支持下列传输样式:
- HTTP
- TCP
- Peer network(对等网)
- IPC(基于命名管道的内部进程通信)
- MSMQ
地址通常采用如下格式:
[基地址] / [可选的 URI]
基地址(Base Address) 通常的格式如下:
[传输协议] :// [机器名或域名] [:可选端口]
下面是一些地址示例:
http://localhost:8001
http://localhost:8001/MyService
net.tcp://localhost:8002/MyService
net.pipe://localhost/MyPipe
net.msmq://localhost/private/MyService
net.msmq://localhost/MyService
浙公网安备 33010602011771号