【WCF】WCF框架学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dongle_74/article/details/56019597

WCF介绍

        Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台,本质是一套软件开发包,与平台无关,即可以实现跨平台服务,是Windows平台上开发分布式应用最佳的实践方式。
       简单的归结为四大部分:
1、网络服务的协议,即用什么网络协议开放客户端接入。
2、业务服务的协议,即声明服务提供哪些业务。
3、数据类型声明,即对客户端与服务器端通信的数据部分进行一致化。
4、传输安全性相关的定义。

WCF学习


服务三要素

        这里我们主要学习WCF的三个服务要素:契约、绑定和地址。

契约

       契约的本质就是用来定义服务的。从SOA系统来看,属于服务公开接口的一部分。一个服务契约,定义了服务端公开的服务方法,使用传输协议,可访问地址,传输的消息格式等内容。即契约描述了该服务的功能和作用,告诉SOA系统中的其他节点这个服务是干什么的。

服务契约

       以ServiceContract标识,一般设置为接口,但也可以是类。ServiceContract用来标识需要加入服务的内容(类或结构),代表其被远程调用。OperationContract用来标识需要实现的操作(类中方法),代表其能被远程调用。

数据契约

        DataContractDataMember.DataContract 指类或结构能够被序列化并传输。DataMember 只能用在类或者结构的属性或字段上,指该属性或字段能够被序列化传输。DataContractAttributeDataMemberAttribute标注自定义数据类型,便可传递复杂数据体(需先添加System.Runtime.Serialization.dll引用)

消息契约

       MessageContract 对控制消息头和消息体元素提供了强力支持,支持MessageHeaderAttributeMessageBodyMemberAttribute属性,可以添加自定义头,控制消息是否被包装(IsWrapped),以及控制签名与加密(ProtectionLevel)。

错误契约

        用于自定义错误异常的处理方式。默认情况下,当服务器抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息。我们可以自定义异常消息的格式,将我们关心的消息放在错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。

注意

       重载问题   在重载是面向对象重要思想,体现了多态特性。但是在WCF中,同一个服务协定中,不能存在同名的方法OperationContract,所以在需要重载时,需要给定重载方法一个OperationContract名称,才能实现调用。

        [OperationContract(Name ="HelloString")]//在同一个协定(serviceContract中不能存在同名的方法,但是可以给OperationContract定义名称,以此来区分这是不同的方法
        //默认 请求响应模式
        string Hello(string name);
        [OperationContract(IsOneWay =true, Name = "HelloVoid")] //定义的是OneWay单程模式,如果没有则是默认的请求响应模式,oneway只有响应,没有返回值
        void Hello();

        请求-响应操作  在默认情况下,服务契约中一般都属于请求-响应操作,是一种交互方式。

        单程操作  One-Way操作不需要服务给出响应,即客户端发出消息,并且得到服务端确认后,就理解结束本次操作调用的模式。

        双程操作  当服务端主动发送消息给客户端时,当客户端需要发送批量信息而只需要一个回复时,这时候就需要双程操作。定义回调契约:CallbackContract=typeof(ICallbackService)。需要注意的是,回调契约容易引发死锁的情况。

    //回调契约
    [ServiceContract(CallbackContract = typeof(ICallbackService))]
    public interface ICallbackService
    {
        [OperationContract]
        void Hello();
    }

绑定

        Binding,是一个制定好的通道栈,包含协议通道,传输通道和编码器。从功能上看,一个绑定继承了通信模式、可靠性、安全性、事务传播和互操作性等设置。下面是WCF提供的12中标准绑定的介绍:




        那么我们该如何选择呢,下面有一个流程图,可供我们参考依据:


         下面简要介绍几种绑定:

netNamePipeBinding

        属于本机WCF-WCF交互的绑定和地址,IPC实现方式。但是netNamePipeBinding绑定只能使用与本机交互,即服务和客户端都需要部署在同一台主机上才能使用,由于是在同一台主机交互,所以netNamePipeBinding是标准绑定中性能最佳的绑定。

        终节点设置:命令管道协议://主机名:端口/服务地址(可选项)  net.pipe://[Hostname]:[port]/[ServiceAddress]

总结

支持单程传输模式

支持“请求-响应”传输模式

支持双工传输模式

性能在标准绑定中最佳

支持WS(Web Service)事务协议

支持传输层消息安全

仅限于WCF系统

不支持跨主机交互

netTcpBinding

        跨主机WCF-WCF交互的绑定和地址。在大型SOA系统中,多个服务器部署在局域网内不同的主机上,不再使用限定本机交互的IPC,一般采用TCP协议进行通信。
       TCP协议:端对端协议,远程连接,连接、发送和接收资料以及终止连接,自动调整超时值,提供可靠、双工传输。
      Net.Tcp端口共享:Net.TCP Port sharing service组件,使net.tcp端口可在多个用户进程间共享。net.tcp端口共享服务是用户模式的Windows服务,可代表通过其连接的辅助。
      netTcpBinding绑定:WCF标准协议中,直接使用TCP协议进行消息交互的只有netTcpBinding,且使用二进制编码提高性能,也支持传输安全。可配置closeTimeout、hostNameComparisonMode、listenBacklog、maxBufferPoolSize、MaxConnections、Name、security、openTimeout等属性。

总结

支持单程传输模式

支持“请求-响应”传输模式

支持双工传输模式

性能在标准中,仅次于netNamePipeBinding

支持ws-事务协议

支持传输层消息安全

只限于WCF系统

支持跨主机交互

支持可靠会话传输

basicHttpBinding

        基于基础的Web服务的标准绑定。

支持请求响应传输;

不支持双工传输;

性能一般;

不知处ws事务协议;

提供基本web服务交互;

可靠会话传输;

跨主机交互


扩展学习

WebService介绍

        Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
        Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。


WCF与WebService区别

       WebService严格说来是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是跨语言和平台的关键)。WCF其实一定程度上就是ASP.Net Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service能做的事情,它几乎都能胜任。WCF不仅支持和继承Web Service,它还兼容和具备微软早期很多技术的特性。


SOA系统

        Service Oriented Architecture,面向服务架构,属于组件架构模型。在W3C中,对其定义:一组公开发表接口,并且提供查询的组件。

特性

每个服务具有明确边界

服务是独立的

采用标准的契约定义和通信协议

服务是自解释的


阅读更多

没有更多推荐了,返回首页