WCF TIPS

Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。

整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。

是Windows平台上开发分布式应用最佳的实践方式。

即跨平台及跨语言的一种远程调用方法, 主要理解及框架, 主要知识点如下.


1. wcf 的大部分功能都包含在一个单独的程序集System.ServiceModel.dll中, 命名空间为System.ServiceModel.


2.服务(Services)是公开的一组功能的集合, 面向服务(Service-Orientation,SO)是一组原则的抽象,是创建面向服务应用程序的最佳实践. 一个面向服务应用程序(SOA)将众多服务聚集到单个逻辑的应用程序中,这就类似于面向组件的应用程序聚合组件, 或者面向对象的应用程序聚合对象.


3.WCF的所有消息均为SOAP消息. 且与传输协议无关.


4.WCF客户端总是使用代理将调用转发给服务, 且允许客户端跨越边界与服务通信, 即客户端可以调用同一进程中跨应用程序域调用, 甚至跨进程调用.


5.WCF的每一个服务都具有一个唯一的地址(Addresses), 包含两个重要元素:服务位置与传输协议, 或者是用于服务通信的传输样式.

TCP地址的默认端口号为808.

HTTP地址的默认端口号为80.

IPC地址使用net.pipe进行传输, 且只能接收来自同一台机器的调用.

MSMQ地址使用net.msmq进行传输.


6.WCF的所有服务都公开为契约(Contract), 主要包括四种:

服务契约 (Service Contract) , 只有接口或类可以标记为服务契约,从而被定义为WCF服务,其它类型都不允许. 且WCF只能使用默认构造函数. 使用Namespace属性设置命名空间.


数据契约 (Data Contract)

错误契约 (Fault Contract)

消息契约 (Message Contract)


7. 每个WCF服务都必须托管(Hosting)在Windows进程中,该进程被称为宿主进程(Host Process).

    IIS托管的主要缺点在于只能使用HTTP协议.


8.终结点就是地址,契约与绑定的混成品. 其中地址定义了服务的位置,绑定定义了服务通信的方式,契约则定义了服务的内容.


9.WCF基于拦截机制的体系结构是指, 其通过代理与客户端的交互,总是处于服务与客户端之间,拦截所有的调用, 执行调用前和调用后的处理.


10.服务契约内部重载时,需要通过Name属性给OperationContract特性指定名称. 因为WSDL不支持重载.

但是我们一般同时为服务与客户端的操作指定别名, 以提高程序可读性, 即仅仅在传输时将指定不同别名, 到达客户端时可以回到原来相同的别名上.


11.当客户端导入一个服务终结点的元数据时,则生成的客户端契约将不再维持原来的层级关系, 它会取消层级. 但使用OperationContract特性中的Action与ResponseAction属性,那么导入的接口定义仍然可以保留原来定义每个操作的契约名.

而恢复客户端层级则是在客户端显式地表明继承关系.


12.一个服务契约是逻辑相关的操作的组合,一旦识别出实体支持的所有操作,就需要将它们分配给契约,这称为服务契约的分解(Service Contract Factoring), 分解服务契约时,通常需要考虑可重用元素.

合理的契约分解可以实现深度特化,松散耦合,精细调整以及契约的重用.


13.由于面向服务的一个核心原则就是在跨越服务边界时,服务不能暴露它们的实现技术, 因此,需要一种正式的规格说明来声明两者之间的转换, 这种方法就是数据契约.


14.WCF格式器DataContractSerializer能够共享数据契约, 而不是基本的类型信息. 定义在System.Runtime.Serialization命名空间中.

   WriteObject()方法用于接收一种类型,

  ReadObject()方法用于转换为另一种类型.


15.委托与事件应做为数据契约的成员进行定义. 由于这种类型的数据成员容易带来较大的麻烦, 故一般不使用其做为数据契约的成员.


16.数据集和数据表可以做为数据契约的有效组成部分,但考虑到此种类型会随着数据库的变化而变化,故一般用数据代替.


17. 在数据契约导入时, 有限的泛型类型会转换为特定的指定类型.


18.在定义服务操作时,各种集合接口,如IEnumerable<T>,IList<T>,ICollection<T>等, 它们的传输型表示形式都使用了数组.

但CollectionDataContract会将集合当作一个泛型的链表公开给客户端. 该链表会提供一个类似接口的集合类型,而不是数组.


19.实例管理是WCF使用的一系列技术的总称,通过它可以将客户端的请求绑定到服务实例上,并根据客户端请求的类型以确定服务实例的管理方式.

实例激活类型之一,单调服务(Per-Call Service), 即为每次的客户端请求分配(销毁)一个新的服务实例.

实例激活类型之二,会话服务(Sessionful Service),即为每次客户端连接分配一个服务实例.

实例激活类型之三,单例服务(Singleton Service), 即所有的客户端会为所有的连接和激活对象共享一个相同的服务实例.



20.ServiceBehaviorAttribute特性用于配置服务行为,它能够影响服务的所有终结点.

      ServiceBehavior特性可以直接应用到服务的实现类上

     OperationBehaviorAttribute特性则用于配置操作的行为, 它只能影响一个特定的操作实现..


21.每个会话都拥有一个客户端和服务都能获得的唯一ID, 每个服务操作都拥有一个操作调用上下文(OperationContext), 服务可以通过操作上下文类的Current静态方法获取当前方法操作上下文的一个引用.

客户端可以通过代理访问会话ID.



22.回调操作是服务契约的一部分,它取决于服务契约对回调契约的定义.在定义回调契约时,ServiceContract特性提供了Type类型的属性CallbackContract.

     为了托管一个回调对象,客户端需要实例化回调对象,然后通过它创建一个上下文对象.



23.若使用回调契约时,客户端必须使用双向代理创建双向通信, 并将回调终结点的引用传递给服务, 而双向代理是继承自类型DuplexClientBase<T>的类型.


24.ServiceBehavior特性的ConcurrencyMode属性(Single, Reentrant,Multiple)可以将服务的并发行为配置为多线程或者重入, 从而解决回调调用时引发的单线程 死锁现象.


25. WCF的错误契约, 即通过它列出服务能够抛出的错误类型. 从而达到服务与客户端共享的基于通信错误之上的任何异常,都是服务契约的一部分.

      [FaultContract]



26.一个分布式事务包含两个或两个以上独立的服务, 或者具有一个单独的服务, 它包含了两个或两个以上的事务资源.

     对于分布式事务, 我们需要依靠两阶段提交协议,以及一个专门的事务管理器.



27. 事务相关的绑定(Transaction-Aware Binding) 是指通过配置使得绑定具有将客户端事务传播到服务的能力. 而客户端的事务是否向服务传播由绑定和操作契约共同决定.

      所有事务相关的绑定都提供了Boolean类型的属性TransactionFlow, 为了实现事务的传播,我们必须显式地在服务宿主和客户端两端的绑定中都启用该功能.


28. WCF特性TransactionFlow特性(Allowed, NotAllowed, Mandatory)可以控制客户端的事务是否传播到服务以及传播的时机.









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值