标签:style blog http io ar os 使用 sp strong
WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service、.NET Remoting、XML Web Service、MSMQ等。WCF推出的原因在于:微软想将不同的分布式技术整合起来,提供一个统一的编程模型,这样对于开发者来说绝对是好事。在过去的2个月时间内,我陆续写了WCF系列文章,这些文章只是自己这段时间学习WCF内容的一个学习过程和笔记,希望通过这种写博文的方式记录下来和总结。本系列并没有对WCF机制做一个深入解析,只是讲解了WCF支持的功能和实现,关于更深入的了解,我相信,只有在项目中使用遇到问题和解决问题的方式才能更深入地理解,这系列文章只是想大家对WCF有一个全面的认识。下面是本系列文章的一个索引,希望可以帮助大家进行收藏,同时也帮助我自己索引。
MSMQ,Microsoft Message Queue——微软消息队列,它是微软之前实现分布式技术之一。其工作原理是:客户端将消息发送到一个消息队列中,服务从该消息队列中取出消息进行处理。通过消息队列的方式,把客户端和服务之间的耦合进行隔离,最明显的好处是异步和可离线功能,缺点是:由于客户端不直接把消息发送到服务进行处理,而是把消息发送到消息队列中,从而不适合客户端需要服务实时交互的情况下,大量请求的时候,响应可能延迟。
.NET Remoting是微软另一种分布式技术,WCF内部实现借鉴了该技术的实现。.NET Remoting优点可以实现跨应用程序域进行通信,缺点是不支持离线功能,并只适合.NET 平台的程序进行通信。其工作原理如下图所示:
XML Web Service是微软另外一种分布式技术,该技术具有的优点是跨平台,跨防火墙和自我描述,像MSMQ和.NET Remoting不能跨平台,因为其传输是二进制格式的数据,而XML Web Service传输的是基于XML的文本文件。其缺点是效率地和安全性,不适合做局域网内应用。所以,一般地说,局域网可以使用MSMQ和.NET Remoting技术,而基于Internet的应用使用XML Web Service。其实现原理如下图所示:
之前说过,WCF是对MSMQ、.NET Remoting、XML Web Service等技术的继承和扩展,所以利用WCF既可以做基于局域网的应用,也可以做基于互联网的分布式应用。WCF最重要的概念就是终结点,服务的提供者将服务通过一个或多个终结点进行发布给服务消费者。而终结点又由地址、绑定和契约组成。
这三个要素在WCF通信中起到的作用分别是:
后面的WCF文章都是对于这三个元素的扩展介绍。
定义WCF服务,自然第一步就是需要定义服务契约,该博文主要介绍了WCF如何实现操作重载的。其主要实现逻辑是为相同的方法定义别名,使其生成的WSDL中operation标签不同。
WCF如果服务中定义了契约的继承关系,通过客户端生成的代理类不会生成具有继承关系的契约结构,解决这个问题的思路就是自定义代理类,使其具有和服务契约中一样的继承结构。
数据契约是定义服务和客户端之间要传送的自定义类型,对于一些基本类型如String、int等内置类型都是可序列化的,所以WCF默认对这些类型可进行序列化并进行传输,但对于自定义类、结构体等类型,因为这些类型默认不支持序列化,WCF中通过DataMemberAttribute特性是自定义类型可以进行序列化传输,并在服务中能进行反序列化为对象来进行数据的处理。WCF中默认使用的序列化器是DataContractSerializer类。
WCF服务实例的管理借鉴了.NET Remoting技术的实现,同样有三种服务实例的激活方式:单调服务、会话服务和单例服务。
WCF中服务激活的默认方式是PerSession,但不是所有的Bingding都支持Session,比如BasicHttpBinding就不支持Session。你也可以通过下面的方式使ServiceContract不支持Session。
在WCF中,除了支持经典的请求/应答模式外,还提供了对单向操作、双向回调操作模式的支持,此外还有流操作的支持。本文介绍在WCF中回调操作的实现。
在WCF中,并不是所有的绑定都支持回调操作,只有具有双向能力的绑定才能够用于回调。例如,HTTP本质上是与连接无关的,所以它不能用于回调,因此我们不能基于basicHttpBinding和wsHttpBinding绑定使用回调,WCF为NetTcpBinding和NetNamedPipeBinding提供了对回调的支持,因为TCP和IPC协议都支持双向通信。为了让Http支持回调,WCF提供了WsDualHttpBinding绑定,它实际上设置了两个Http通道:一个用于从客户端到服务的调用,另一个用于服务到客户端的调用。
回调操作时通过回调契约来实现的,回调契约属于服务契约的一部分,一个服务契约最多只能包含一个回调契约。一旦定义了回调契约,就需要客户端实现回调契约。在WCF中,可以通过ServiceContract的CallbackContract属性来定义回调契约。
WCF支持事务的传递,事务的传递方式由绑定的事务流属性(TransactionFlow属性)、操作契约中的事务流选项(TransactionFlowOption) 以及操作行为特性中的事务范围属性(TransactionScopeRequired)共同决定。WCF事务支持的四种传播模式是:Client/Service、Client、Service和None。下图是四种传播模式对应推荐的设置。
既然WCF对之前多种分布式技术的继承和扩展,所以也自然支持可离线的功能,该文介绍了WCF中对队列服务的支持和实现。其实现方式与MSMQ的实现方式类似,只是WCF为队列服务提供了新的API支持,主要通过MsmqIntegrationBinding绑定类进行支持,其通信机制如下图所示:
由Roy Thomas Fielding 在他的博士论文(“体系结构风格和基于网络软件体系的设计”)中提出了Rest概念。Rest服务是将服务抽象为资源,每个资源都有一个唯一的统一资源标识符(URI),我们不再是通过调用操作的方式与服务进行交互了,而是通过HTTP标准动词(GET、POST、PUT和DELETE)的统一接口来完成。.NET 3.0之后,微软提供了新的API在WCF对Rest服务进行了支持,这些类包括WebHttpBinding类、WebGetAttribute、WebInvokeAttribute特性和WebServiceHost类。其实现方式和之前的WCF程序类似,只是使用新的API来对服务进行定义。
到此,WCF系列也就告一段落了,通过对WCF技术系统的学习,我对WCF技术有了一个全面的认识,之后深入的理解就需要自己在项目中积累和实践了,希望通过这个系列也可以帮助到一些初学者。接下来我将会继续分享一个快速入门WPF系列,WPF在2011年的时候,我已经看过一些书籍了,但是当时没有进行记录,到现在已经忘记差不多了,想捡起来又得去看看厚厚的书籍,也不知道那些自己已经了解了,哪些没了解,有得无敌放肆的全文索引地看,所以这次希望对WPF再进行学习并通过博文记录下来,以后如果忘记就可以直接看自己记录的博文了,这样就不需要去看厚厚的书籍去进行复习了。希望大家也可以对我进行督促。
标签:style blog http io ar os 使用 sp strong
原文地址:http://www.cnblogs.com/zhili/p/WCFSummary.html