Programming WCF Services中文翻译(3)-契约

1.4. Contracts(契约)

在WCF中,所有的服务都暴露契约,契约是一个平台无关(platform-neutral )和描述服务只做什么的标准方法。WCF定义了四种类型的契约。

Service contracts(服务契约)

描述操作能执行服务的客户端。服务契约是下一章的主题。

Data contracts(数据契约)

定义哪种数据类型可以从服务中传递。WCF为固定(built-in) 类型(如:int和string)定义了内含的契约,但是你能很容易的为自定义类型定义内含选入的(opt-in)数据契约。第三章将讨论定义和使用数据契约,后续章节将在需要时使用数据契约。

Fault contracts(错误契约)

定义服务发起的错误,并且将服务句柄(handles)和propagandas错误发送给客户端。第六章将讨论如何定义和使用错误契约。

Message contracts(消息契约)

允许所有的服务和消息进行直接交互,有类型的和无类型的消息契约拥有您不得不遵守的消息格式有利于交互操作。作为一个WCF开发者,您将很少用到消息契约,因此本书不会使用消息契约。

1.4.1. The Service Contract(服务契约)

ServiceContractAttribute被定义为:

[AttributeUsage(AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
{
   public string Name
   {get;set;}
   //More members
}

这个属性允许您定义一个服务契约,您把它使用到接口(interface)或类(class)中。见下例:

Example 1-1. Defining and implementing a service contract

ServiceContract属性映射一个CLR接口为技术无关性的服务契约。ServiceContract属性作为一个类型可见独立性的WCF契约暴漏一个CLR接口(或者类)。类型可见性并没有影响到WCF,因为可见性是一个CLR的概念。在内部接口暴漏ServiceContract属性作为公共服务契约,准备跨过服务边界去消费。没有ServiceContract属性,在客户端接口是不可见的,面向服务的原则是服务边界是清晰的。去执行这项,所有的服务必须明确选入(opt in):只能是被服务契约装饰的接口或者类被认为是WCF契约,其他类型不行。

另外,当使用服务契约属性时没有成员的类型将被认为是契约的一部分。你必须明确检查WCF,使用操作契约属性(OperationContractAttribute)可以使方法暴漏为WCF的一部分。操作契约属性定义如下:

[AttributeUsage(AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
{
   public string Name
   {get;set;}
   //More members
}

您只能把操作契约属性应用在方法上,而不能应用在属性、索引器或者事件上。WCF只理解的操作逻辑功能和操作契约属性暴漏一个契约方法作为服务契约的一部分的一个逻辑操作平台。接口或类的其他没有操作契约属性的方法将不是契约的一部分。为操作明确服务边界和维持一个明确的选入(opt-in)模型。另外,一个契约操作不能使对象引用作为原始类型(parametersonly primitive types )或者数据契约是被允许的。

posted @ 2009-01-08 13:27  HelloCG  阅读(259)  评论(0编辑  收藏  举报