WCF 是一个运行时和一组 API,用于创建在服务与客户端之间发送消息的系统。
WCF 建立在基于消息的通信这一概念基础之上。
消息在终结点之间发送。终结点是发送或接收消息(或执行这两种操作)的场所,它们定义消息交换所需要的所有信息。
“终结点”以基于标准的方式描述消息应发送到的位置、消息应如何发送以及消息应具有的形式。服务可以将这些信息作为元数据加以公开。
服务协定指定终结点与外界通信的内容,更具体的说,它是有关一组特定消息的声明,这些消息被组织成基本消息交换模式,如请求/答复,单向和双工。
如果说服务协定是一组在逻辑上相关的消息交换,那么服务操作就是单个消息交换。
服务协定指定以下内容:
- 协定公开的操作。
- 针对交换的消息所进行的各种操作的签名。
- 这些消息的数据类型。
- 操作的位置。
- 用于支持与服务成功通信的特定协议和序列化格式。
WCF 应用程序使用托管属性、接口和类来定义服务的结构并实现该服务
服务即一组操作。
在 Windows Communication Foundation (WCF) 应用程序中,通过创建一个方法并使用 OperationContractAttribute 属性对其进行标记来定义操作
若要创建服务协定,需要将操作组合到一起,具体方法是在使用 ServiceContractAttribute 属性标记的接口中声明这些操作,或在使用同一属性进行标记的类中定义它们
任何不具有 OperationContractAttribute 属性的方法都不是服务操作,并且不能公开供 WCF 服务的客户端使用。像任何托管方法一样,这些方法只能由位于它们声明的访问范围之内的对象调用。
建议您使用接口,因为接口可以直接对服务协定建模。如果不经过实现,接口的作用只是根据特定签名对一组方法进行定义。同样,没有实现的服务协定根据特定签名对一组操作进行定义。如果实现服务协定接口,即可实现 WCF 服务。
服务协定接口具有托管接口的所有优点:
- 服务协定接口可以扩展任何数量的其他服务协定接口。
- 一个类可以通过实现服务协定接口来实现任意数量的服务协定。
- 您可以通过更改接口实现来修改服务协定的实现,而让服务协定保持不变。
- 您可以通过实现旧接口和新接口来确定服务的版本。老客户端连接到原始版本,而新客户端则可以连接到较新的版本。
每个操作都有一个返回值和一个参数,即使它们为 void。
显式设置服务协定名称和命名空间。