WCF 4 高级编程 - 读书笔记

第2章 服务契约与数据契约

在SOA架构中,契约提供了服务通信所必需的元数据。契约用来定义数据类型、操作、消息交换模式和消息交换使用的传输协议。契约通常是XML格式发布的。在WCF中,服务元数据通常是用WSDL(Web Service Description Language, Web服务描述语言)文档格式来描述的。有关这方面的详细内容,可以访问 http://www.w3.org/TR/wsdl

 

如果不同模式之间必须严格保持一致,则每个修改实现后,必须赋给契约一个新的版本。

如果不同模式之间没有必要严格保持一致,则只需注意以下几点:

服务契约版本控制

  • 可以在任何时候添加新方法。
  • 可以不删除任何已存在的方法。
  • 参数的数据类型必须保持兼容。

数据契约版本控制

  • 不要由于继承的原因给数据契约赋予一个新版本,而是要创建一个独立的新数据类。
  • 为了方便双向版本控制,必须一开始就实现IExtensibleDataObject接口。
  • 如果确实需要改变数据类或数据成员的名称,请使用DataContract或DataMember特性生成兼容的数据契约。
  • 不要随便对数据类型进行修改。
  • 不要改变由[DataMember(Order=?)]属性确定的数据成员的顺序。
  • 保持IsRequired的默认值(false)不变。
  • 可以在任何时候添加数据成员,但是必须记住,这会改变序列化的顺序。可以把新成员的Order属性设置为当前版本值。如第2版,就赋予Order=2.
  • 不要删除数据成员。
  • 不要对IsRequired属性做后续的修改。

 

第3章 绑定

为了定义一个服务的终结点,必须实现WCF的A、B、C三要素,即地址、绑定和契约(Address、Binding和Contract),它们相当于一个服务的Where、How和What。

  • 地址是服务托管的地方,通过地址引用服务,客户端通过地址发送消息。
  • 绑定定义如何使用服务,即定义如何发送和接收消息。
  • 契约定义消息的内容。

 

配置和使用绑定时,必须记住:传输绑定元素和编码绑定元素必须是指定的第一个和第二个元素,这是因为它们保证了通道之间的可靠通信。

 

带有“net”前缀的绑定表示它们是利用.NET特性设计的,因而可以执行许多高性能的操作。带有“ws”前缀的绑定表示可以应用于所有系统,而且符合Web标准。

 

如何选择一个合适的绑定呢?

最明显的决定是根据是否需要与非WCF应用程序交互。如果服务需要与WCF客户端通信,则可以使用任何以net开头的绑定。

 

当修改basicHttpBinding的MessageEncoding属性、将它的默认值从Text改为Mtom.Mtom(消息传输优化机制,Message Transmission Optimization Mechanism)时,可以把SOAP消息按原始字节进行发送,从而实现用较小的消息传递大量的数据,这种修改会大大改善系统的性能。

 

第4章 客户端

与SOA相反,REST最重要的不是消息本身,而是资源、URL地址和使用的动作。

 

为了帮助大家使用状态码(如200,403),枚举System.Net.HttpStatusCode或类OutgoingWebResponseContext提供了可以使用的辅助方法。

 

REST API的使用只限于几个动作,避免了复杂的SOAP消息交换。

 

REST Starter Kit工具提供了许多类和扩展方法,可用来编写服务器端的REST程序和客户端的REST调用程序。然而,此工具不仅包含程序集,还包含许多完整的代码,可以从这些代码获取实现REST程序的各种不同思想。

(CodePlex显示:The WCF REST Starter Kit is no longer supported

To build RESTful services using .NET please use ASP.NET Web API.)

 

第5章 实例化

InstanceContextMode决定了会话期间服务器对象的3种创建模式:

  1. 在每一会话(PerSession)中客户端代理是否与服务对象的同一个实例进行通信
  2. 是否在每次调用(PerCall)服务对象时先创建一个新的实例,然后当调用结束时立即删除此实例
  3. 是否不管客户端多少都只创建一个(Single)服务器实例

 

 

 

 

暂停更新...

posted @ 2012-10-16 13:03  姚一^o^  阅读(1775)  评论(2编辑  收藏  举报