本文共 3440 字,大约阅读时间需要 11 分钟。
WCF服务编程设计规范(3):服务契约、数据契约和实例管理设计规范。本节涵盖服务契约和数据契约设计规范,以及服务实例管理内容。中英对照版本,欢迎留言交流。 1. Always apply the ServiceContract attribute on an interface, not a class: 把 ServiceContract 属性 标记到契约接口上,而不是服务类上 class MyService : IMyContract 2. Prefix the service contract name with an I : 3. Avoid property-like operations: void SetName(string name); 4. Avoid contracts with one member. 5. Strive to have three to five members per service contract. 6. Do not have more than 20 members per service contract. Twelve is probably the practical limit. 每个服务契约里成员不要超过 20 个。 12 个也许久应该就是极限 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. 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. 不要产生泛型类型参数的哈希值,使用一个易懂的类型名称作为替代。 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 ,如需转载请自行联系原作者