WCF服务编程设计规范(3):服务契约、数据契约和实例管理设计规范

简介:
  WCF服务编程设计规范(3):服务契约、数据契约和实例管理设计规范。本节涵盖服务契约和数据契约设计规范,以及服务实例管理内容。中英对照版本,欢迎留言交流。
Service Contracts
服务契约
1.        Always apply the  ServiceContract  attribute on an interface, not a class:
ServiceContract 属性 标记到契约接口上,而不是服务类上
  //Avoid: 避免
  [ServiceContract]
  class  MyService
  {
  [OperationContract]
  public void MyMethod()
  {...}
  }
  //Correct: 正确
  [ServiceContract]
  interface IMyContract
  {
  [OperationContract]
  void MyMethod();
  }
  class MyService : IMyContract
  {
  public void MyMethod()
  {...}
  }
2.        Prefix the service contract name with an  I :
服务契约名称以 I 开头
  [ServiceContract]
  interface  I MyContract
  {...}
3.        Avoid property-like operations:
避免定义与属性类似的操作
  //Avoid:
  [ServiceContract]
  interface IMyContract
  {
  [OperationContract]
  string GetName();
  [OperationContract]
  void SetName(string name);
  }
4.        Avoid contracts with one member.
避免契约里只包含一个成员
5.        Strive to have three to five members per service contract.
每个契约里尽量保证 3-5 个成员
6.        Do not have more than 20 members per service contract. Twelve is probably the  practical limit.
          每个服务契约里成员不要超过 20 个。 12 个也许久应该就是极限
Data Contracts
数据契约
1. Avoid inferred data contracts (POCO). Always be explicit and apply the  DataContract  attribute.
          避免使用推测性的数据契约。明确使用 DataContract 属性定义数据契约。
1.        Use the  DataMember  attribute only on properties or read-only public members.
只在属性或者只读的成员上使用 DataMember 属性
2.        Avoid explicit XML serialization on your own types.
避免自己的类型上明确使用 XML 序列化标记
3.        Avoid message contracts.
避免使用消息契约
5. When using the  Order  property, assign the same value to all members coming from  the same level in the class hierarchy.
          当使用 Order 属性的时候,对于类层次相同的所有成员赋相同的值
6. Support  IExtensibleDataObject  on your data contracts. Use explicit interface  implementation.
          数据契约支持 IExtensibleDataObject 。使用明确地实现接口。
7. Avoid setting  IgnoreExtensionDataObject  to  true  in the  ServiceBehavior  and  CallbackBehavior  attributes. Keep the default of  false .
          避免在 ServiceBehavior CallbackBehavior 属性里把 IgnoreExtensionDataObject  设置为 true 。保持默认的 false
8. Do not mark delegates and events as data members.
          不要使用委托和事件作为数据成员
9. Do not pass .NET-specific types, such as  Type , as operation parameters.
          不要传递 .NET-specific 类型,比如 Type ,作为操作参数。
10. Do not accept or return ADO.NET  DataSet s and  DataTable s (or their type-safe  subclasses) from operations. Return a neutral representation such as an array.
          不要接受或者返回 ADO.NET  DataSet s DataTable s ( 或它们的类型安全的子类 ) 。返回一个中立的数据形式,比如数组。
11. Suppress the generation of a generic type parameter hash code and provide a legible  type name instead.
          不要产生泛型类型参数的哈希值,使用一个易懂的类型名称作为替代。
Instance Management
实例管理
1. Prefer the per-call instance mode when scalability is a concern.
          当考虑到可伸缩性的时候,使用 Per_Call 模式,单调模式。
2. If setting  SessionMode.NotAllowed  on the contract, always configure the  service instancing mode as  InstanceContextMode.PerCall .
          如果在契约上设置了 SessionMode.NotAllowed ,通常会把服务实例模式设置为 InstanceContextMode.PerCall
3. Do not mix sessionful contracts and sessionless contracts in the same service.
          不要在一个服务里把会话契约和非会话契约混用。
4. Avoid a singleton unless you have a natural singleton.
          避免使用单例模式,除非理所当然地应该使用单例模式。
5. Use ordered delivery with a sessionful service.
          尽量在会话服务里使用顺序传递。
6. Avoid instance deactivation with a sessionful service.
          避免在会话服务里停止服务实例
7. Avoid demarcating operations.
          避免分布操作(比如有先后顺序的操作。)
8. With durable services, always designate a completing operation.
          在持久化服务里,通常指定一个完成操作。



 本文转自 frankxulei 51CTO博客,原文链接: http://blog.51cto.com/frankxulei/319610 ,如需转载请自行联系原作者
相关文章
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
73 0
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
107 0
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
138 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(四)——数据契约实现传送自定义数据类型
WCF基础教程(四)——数据契约实现传送自定义数据类型
119 0
WCF使用纯代码的方式进行服务寄宿
服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以以纯代码的方式实现服务的寄宿工作。
891 0
|
Windows
WCF服务寄宿到IIS
一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
1095 0
WCF服务自我寄宿
WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务、Windows服务、Winform程序、控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便、高效提供服务调用。
1034 0
|
网络架构
WCF入门(二)——终结点,契约(2)
Contract 契约,用于提供消息的标准,消息交换的规则。它分四类: ·服务契约 定义操作 ·数据契约 定义数据 ·异常契约 定义异常 ·消息契约 定义消息格式 (一)服务契约 服务契约,可以用接口定义,也可以直接在类上定义。
671 0