根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式 应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相 关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
WCF是建立在.Net Framework 2.0基础之上的,正式的版本应该会作为Windows Vista的核心部分而Release。然而,这并不代表WCF只能运行在Windows Vista下。只要安装了WinFX Runtime Components,在Windows XP和Windows 2003操作系统下,仍然可以使用。Visual Studio 2005中并没有包含WCF,但是当安装好了WinFX Runtime Components后,我们就可以在Visual Studio 2005环境下开发和创建WCF的程序了。
目前最新的WCF版本是February 2006 CTP,下载页面是:http://www.microsoft.com/downloads/details.aspx?FamilyId=F51C4D96-9AEA-474F-86D3-172BFA3B828B&;displaylang=en。使用WCF需要用到一些相关的工具,如SvcUtil.exe,所以还需要下载WinFX Runtime Components的SDK,其下载页面是:http://www.microsoft.com/downloads/details.aspx?FamilyId=9BE1FC7F-0542-47F1-88DD-61E3EF88C402&;displaylang=en。安装SDK可以选择网络安装或本地安装。如果是本地安装,文件大小为1.1G左右,是ISO文件。安装了SDK后,在program files目录下,有microsoft SDK目录。
WCF是微软重点介绍的产品,因此也推出了专门的官方网站(http://windowscommunication.net),该网站有最新的WCF新闻发布,以及介绍WCF的技术文档和样例代码。
二、WCF的优势
在David Chappell所撰的《Introducing Windows Communication Foundation》一文中,用了一个活鲜鲜的例子,来说明WCF的优势所在。假定我们要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。 该租车预约服务会被多种应用程序访问,包括呼叫中心(Call Center),基于J2EE的租车预约服务以及合作伙伴的应用程序(Partner Application),如图所示:
从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。(注:这种说法仅仅是从功能的角度。事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已 经改变了通常的开发模式。)因此,对于上述汽车预约服务系统的例子,利用WCF,就可以解决包括安全、可信赖、互操作、跨平台通信等等需求。开发者再不用 去分别了解.Net Remoting,ASMX等各种技术了。
概括地说,WCF具有如下的优势:
1、统一性
前面已经叙 述,WCF是对于ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合。由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区 别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。http://wayfarer.cnblogs.com/images/cnblogs_com/wayfarer/wcf/wcf01.gif
http://wayfarer.cnblogs.com/images/cnblogs_com/wayfarer/wcf/wcf03.gif 2、互操作性
由于WCF最基本的通信机制是SOAP,这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信,如下图所示:
可 以跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器(如WebSphere,WebLogic)。应用程序可以运行在Windows操作系统下,也可以运行在其他的 操作系统,如Sun Solaris,HP Unix,Linux等等。如下图所示:
3、安全与可信赖
WS-Security,WS-Trust和WS-SecureConversation均被添加到SOAP消息中,以用于用户认证,数据完整性验证,数据隐私等多种安全因素。
在SOAP 的header中增加了WS-ReliableMessaging允许可信赖的端对端通信。而建立在WS-Coordination和WS- AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions)。http://wayfarer.cnblogs.com/images/cnblogs_com/wayfarer/wcf/wcf04.gif 上述的多种WS-Policy在WCF中都给与了支持。对于Messaging而言,SOAP是Web Service的基本协议,它包含了消息头(header)和消息体(body)。在消息头中,定义了WS-Addressing用于定位SOAP消息的 地址信息,同时还包含了MTOM(消息传输优化机制,Message Transmission Optimization Mechanism)。如图所示:http://wayfarer.cnblogs.com/images/cnblogs_com/wayfarer/wcf/wcf05.gif
4、兼容性
WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。
> [原创]我的WCF之旅(1):创建一个简单的WCF程序 (Artech)
> [原创]我的WCF之旅(2):Endpoint Overview (Artech)
> [原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) (Artech)
> [原创]我的WCF之旅(4):WCF中的序列化(Serialization)- Part I (Artech)
> [原创]我的WCF之旅(4):WCF中的序列化(Serialization)- Part II (Artech)
> [原创]我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading) (Artech)
> [原创]我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案 (Artech)
> [原创]我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承 (Artech)
> [原创]我的WCF之旅(8):WCF中的Session和Instancing Management (Artech)
> [原创]我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace (Artech)
> [原创]我的WCF之旅(10):如何在WCF进行Exception Handling (Artech)
> [原创]我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯 (Artech)
> [原创]我的WCF之旅(12):使用MSMQ进行Reliable Messaging (Artech)
> [原创]我的WCF之旅(13):创建基于MSMQ的Responsive Service (Artech)
From:http://www.cnblogs.com/series/3/
=======================
WCF从理论到实践系列文章索引
WCF从理论到实践(16):操作重载(带视频+ppt+源码)
WCF从理论到实践(17):OO大背离(带视频+ppt+源码)
Via: http://kb.cnblogs.com/list/43708/
====================================
MSDN上的WCF入门教程
本节内容
描述如何使用用户定义的接口创建 WCF 协定。协定用于定义服务向外界提供的功能,并向外界的潜在用户描述如何与服务进行通信。如何:实现 Windows Communication Foundation 服务协定
描述如何实现服务协定。创建了协定后,必须在一个从定义协定的接口继承的类中实现服务所提供的功能。如何:承载和运行基本的 Windows Communication Foundation 服务
描述如何在代码中配置服务的终结点,以及如何在控制台应用程序内承载服务和启动服务。若要激活服务,必须在运行时环境中配置和承载服务。此环境将创建服务并控制其上下文和生存期。如何:创建 Windows Communication Foundation 客户端
描述如何从 WCF 服务检索用于创建 WCF 客户端的元数据。此过程使用由 WCF 提供的 ServiceModel Metadata Utility Tool (Svcutil.exe)。如何:配置基本 Windows Communication Foundation 客户端
描述如何配置使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 创建的基本客户端。配置客户端需要指定客户端用于访问服务的终结点。如何:使用 Windows Communication Foundation 客户端
描述如何使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 生成的 WCF 客户端代理来调用服务所提供的功能。
Link: http://msdn.microsoft.com/zh-cn/library/ms734712.aspx
============================[源码下载]
作者:webabcd
介绍
WCF (Windows Communication Foundation) :契约, 绑定, 宿主, 异常处理, 异步调用, 双向通讯, MTOM, 流数据传输, 序列化, 实例模型, 会话状态, 并发, 限流, 事务, 安全, 可靠性消息, 消息队列, WCF创建REST, AJAX调用WCF
1、化零为整WCF(1) - 不能免俗,我也从Hello开始
介绍
废话不多说,俗也不能免,我也从Hello开始。
2、化零为整WCF(2) - 契约Contract(ServiceContract、OperationContract、DataContract、ServiceKnownType和DataMember)
介绍
服务契约(ServiceContract),操作契约(OperationContract),数据契约(DataContract),服务已知类型(ServiceKnownType),数据成员(DataMember)。
3、化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)
介绍
Http以basicHttpBinding为例,Tcp以netTcpBinding为例。
4、化零为整WCF(4) - 异常处理(Exception、FaultException、FaultException、IErrorHandler)
介绍
一般Exception的处理,FaultException和FaultException的抛出和处理,使用IErrorHandler处理异常。
5、化零为整WCF(5) - 宿主Hosting(宿主在IIS, Application, WAS, WindowsService)
介绍
WCF服务可以宿主在IIS, Application, WAS, WindowsService。本文以宿主在WindowsService为例。
6、化零为整WCF(6) - 消息处理(异步调用OneWay, 双向通讯Duplex)
介绍
通过操作契约的IsOneWay参数实现异步调用,基于Http, TCP, Named Pipe, MSMQ的双向通讯。
7、化零为整WCF(7) - 消息处理(使用消息传输优化机制 - MTOM)
介绍
MTOM(Message Transmission Optimization Mechanism) - 消息传输优化机制。本文以web方式上传大文件为例。
8、化零为整WCF(8) - 消息处理(使用流数据传输文件)
介绍
使用流数据传输文件,减少内存开销。
9、化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter)
介绍
本文分别以DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter为例。
10、化零为整WCF(10) - 实例模型(InstanceContextMode)
介绍
ServiceBehavior
InstanceContextMode.PerCall - 新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。
InstanceContextMode.PerSession - 为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。
InstanceContextMode.Single - 只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。
11、化零为整WCF(11) - 会话状态(Session)
介绍
ServiceContract
SessionMode.Allowed - 指定当传入绑定支持会话时,协定也支持会话(默认值)
SessionMode.Required - 指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常
SessionMode.NotAllowed - 指定协定永不支持启动会话的绑定
OperationContract
IsInitiating - 获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。
IsTerminating - 获取或设置一个值,该值指示服务操作在发送答复消息(如果存在)后,是否会导致服务器关闭会话。
12、化零为整WCF(12) - 并发和限流(Concurrent和Throttle)
介绍
ConcurrencyMode.Single:单线程并发模式。系统自动加锁,无并发问题
ConcurrencyMode.Reentrant:可重入的单线程并发模式。有可重入(回调)操作时,此模式才会生效,从回调返回的线程会进入队列尾部排队
ConcurrencyMode.Multiple:多线程并发模式。系统不会自动加锁,有并发问题
WCF(Windows Communication Foundation) - 限流(Throttle):
maxConcurrentCalls - 服务中同时存在的最大活动消息数,默认值为 16
maxConcurrentInstances - 服务中同时存在的最大服务实例数,默认值为 Int32.MaxValue
maxConcurrentSessions - 服务中同时存在的最大会话数,默认值为 10
13、化零为整WCF(13) - 并发控制(锁)(Mutex, Semaphore, Monitor, Lock, ThreadPool, Interlocked, ReaderWriterLock)
介绍
以 ConcurrencyMode.Multiple并发模式及InstanceContextMode.Single实例模型为例(此时有并发问题), 介绍如何做并发控制,即各种锁的使用(Mutex, Semaphore, Monitor, Lock, ThreadPool, Interlocked, ReaderWriterLock)
14、化零为整WCF(14) - 事务(Transaction)
介绍
对契约方法使用TransactionFlowAttribute声明(设置TransactionFlowOption参数),以指定服务操作的事务流策略
对服务方法是用OperationBehaviorAttribute声明(设置TransactionScopeRequired参数),以指定方法是否在事务范围(TransactionScope)内执行
配置host和client的binding节点的transactionFlow属性,以指定绑定是否支持流事务
15、化零为整WCF(15) - 可靠性消息(ReliableMessaging)
介绍
通过重试的方法来保证消息的可靠传递,默认为8次
当配置了“有序传递”的时候,客户端和服务端会开辟缓冲区,服务端缓冲区在接到所有客户端发来的消息后,按照客户端调用的顺序排序各个消息,然后有序地调用服务端
16、化零为整WCF(16) - 消息队列(MSMQ - MicroSoft Message Queue)
介绍
netMsmqBinding的binding属性配置如下:
ExactlyOnce - 确保消息只被投递一次
Durable - 消息是否需要持久化
TimeToLive - 消息过期并且从原有的队列移动到死信队列的时间
ReceiveRetryCount - 将消息传输到重试队列前尝试发送该消息的最大次数
MaxRetryCycles - 重试最大周期数
RetryCycleDelay - 重试周期之间的延迟
ReceiveErrorHandling - 指定如何处理错误的消息
DeadLetterQueue - 指定所使用的死信队列的类型
CustomDeadLetterQueue - 本地自定义死信队列的URI
17、化零为整WCF(17) - 安全(Security)
介绍
本文以用户名和密码做验证,通过X.509证书做加密为例
18、化零为整WCF(18) - Web编程模型(WCF创建REST, AJAX调用WCF)
介绍
使用WCF创建REST服务,使用asp.net ajax调用WCF服务
System.ServiceModel.Activation.WebServiceHostFactory - 用于承载使用 WCF Web 编程模型的服务
System.ServiceModel.Activation.WebScriptServiceHostFactory - 能够向服务中自动添加 ASP.NET AJAX 终结点而无需进行配置
OK
[源码下载]
==================
WCF技术剖析系列:
WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
WCF技术剖析之二:再谈IIS与ASP.NET管道
WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效
WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成
WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制
WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?
WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理
WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
WCF技术剖析之十一:异步操作在WCF中的应用(下篇)
WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
WCF技术剖析之十六:数据契约的等效性和版本控制
转自:http://hi.baidu.com/freezesoul/blog/item/4555357a7fa2e7e92e73b30d.html
这里我来加个系列的