最近在读Juval Lowy的Programming WCF Services。读英文,一知半解,边看边做点笔记吧。
Windows Communication Foundation (WCF)是.NET 3.0的一部分。对.NET 3.0的介绍有一个简单的公式:.NET 3.0=.NET 2.0+WCF+WPF+WCS+WF。所以,在.NET2.0中写的程序,在.NET3.0中是可以直接运行的,不像.NET1.1迁移到.NET2.0会有额外的工作要做。
先简单说说WCF、WPF、WCS、WF这几个概念。
WCF:WCF的3个关键的设计理念是,互操作性、生产力、面向服务的开发。WCF结合并扩展了现有的微软分布式系统技术,诸如Enterprise Services、System.Messaging、.Net Remoting、ASMX、Web Services Extensions(WSE)等等。同时,通过支持大量WS-*标准,WCF也提供了合非微软技术应用程序的互操作性。
WF(Workflow Foundation):提供了企业级工作流开发框架和引擎。
WPF(Windows Presentation Foundation):也就是微软宣传的silverlight,利用XAML开发丰富的下一代界面。
WCS(Windows Cardspaces):是身份标识的数字化实现,WCS为不同身份标识管理技术的实现提供了一个总体框架。
大话说了一堆,开始读书吧:
第一章是WCF Essentials。看了5个Section了。
1.1什么是WCF,大可不看,帽子~
1.2 服务(Services)。WCF的核心就是服务。什么是服务,我在HI SOA中也引了一堆大话,基本就是那个意思。面向过程——面向对象——面向组件,走到现在,就是——面向服务。基于面向服务构建应用时,就是调用一个个的服务,像搭积木一样(很理想化吧!~)。在WCF中使用Services时,约定是用代理方式调用。不管是在同一台机子上、还是局域网内、跨网络构建应用,调用Services时都要通过proxy。这样一来,在利用WCF时,就形成了一种统一的编程模型。
1.3 地址(Addresses)。调用服务,要通过地址实现。WCF中,Addresses的格式是这样的:
[base address]/[optional URI],其中base address又是这样的:[transport]://[machine or domain][:optional port]。因为WCF是支持多种协议的,所以[transport]部分就是指明所用协议的。来一组例子:
http://localhost:8001/MyService
net.tcp://localhost:8002/MyService
net.pipe://localhost/MyPipe
net.msmq://localhost/private/MyService
net.p2p://localhost/private/MyService
分别是基于Http、TCP、IPC(Inter-Process Communication over named pipes)、MSMQ、Peer network协议的地址。
其中,在TCP、Http协议的地址中,如果不显示指定断口号,则分别会使用默认的808、80端口。
1.4契约(Contracts)。在使用WCF时,一定要有公开的Contracts。通过contract告诉服务使用者服务是干什么的。WCF中Contract包括4类:Service contracts、Data contracts、Fault contracts、Message contracts。分别对服务内容、数据类型、错误抛出处理机制、消息进行约定。其中,Message contracts时不推荐使用的。这一节,重点介绍了Service Contract。具体又包括:[ServiceContract]、[OperationContract]两部分。用法,同.net web services中指定某某方法为[WebMethod]一样。值得注意的是,在使用WCF时,指定服务契约推荐用接口的方式实现,不推荐直接在服务类上用[ServiceContract] attribute。为了更好的组织contracts,WCF中也提供了namespaces。
1.5宿主(Hosting):WCF服务的宿主可以是IIS、Self-Hosting、WAS Hosting。
各种宿主的特点是:
IIS:利用了IIS来管理宿主进程(host process)的生命周期。优点是可以在客户端第一次调用服务是自动启动宿主进程。主要缺点是只能支持Http协议,特别是在IIS5中很难实现多个服务共用一个端口的应用。
Self-Hosting:开发人员自己提供宿主进程的生命周期管理。这就要求在客户端调用服务之前进程已经是开启的。在Main()中启动进程,例子:
public static void Main ( ){
ServiceHost host = new ServiceHost(typeof(MyService));
host.Open( );
Application.Run(new MyForm( ));
host.Close( );
}
利用Self-Hosting具有可实现in-proc(服务嵌入客户端应用)、客户应用环境不确定、简单编程实现等优点。
WAS:Windows Activation Service (WAS)是vista中的系统服务,是IIS7的一部分,但是它可以单独安装。在WAS上构建WCF的优点是:解决IIS上只能支持Http协议的问题,同时相对self-hosting的方式而言,有应用池、垃圾回收、空闲时管理、身份认证管理、隔离等方面的优势。
今天就这么些