WCF服务合同基本内容概述

开发 开发工具
WCF服务合同主要帮助我们描述一下再服务上都执行了哪些操作。我们将会在这篇文章中为大家详细介绍一下这方面的相关知识。

WCF是一款功能强大的开发工具,可以帮助开发人员打造一款跨平台的互联解决方案。在WCF中,所有的服务都暴露合同。合同是一种描述服务所实现功能的平台中立的标准的方式。WCF定义了四种类型的合同:#t#

· 服务合同描述你可以在服务上执行哪些操作。

· 数据合同定义哪些数据类型被传入和传出服务。WCF为内置类型定义隐式合同,例如int和string,但是你可以容易地为定制类型定义显式的选入式数据合同。

· 错误合同定义哪些错误将被该服务所激发,以及该服务怎样处理错误信息和把如何把它们传播到客户端。

· 消息合同允许服务直接与消息进行交互。消息合同可以被类型化或非类型化,并且有点类似于CLR中的迟绑定调用。不过,消息合同很少为SOA开发者所用。

在这4种类型的合同中,本文将集中讨论服务合同。

你可以使用ServiceContractAttribute来定义一个服务合同,并且你可以把该属性应用于一个接口或一个类,如列表1(见本文相应下载源码)所示。

WCF服务合同独立于接口或类可见性-公共或内部可见性是一个CLR概念,而不是WCF概念。在一个内部接口上应用ServiceContractAttribute将把该接口暴露为一个公共服务合同(可以跨越服务边界进行消费)。没有ServiceContractAttribute的话,该接口对WCF客户端是不可见的,这与面向服务的宗旨一致(服务边界是显式的)。为了强制实现这一点,所有的合同必须是严格选入的。

OperationContractAttribute仅能被应用到方法(而不是属性,索引器或事件,这都是一些CLR概念)中。OperationContractAttribute把一个合同方法暴露为在服务合同上执行的一种逻辑操作。该接口上的其它不具有OperationContractAttribute属性的方法不会成为合同的一部分。这可以强制实现显式的服务边界,并且,对于操作本身来说,保持一种选入模型。注意,合同操作独立于方法可见性。列表1展示了通过定义一个合同接口把WCF服务合同与其实现分离开来的***应用。

另外,你还可以直接把ServiceContractAttribute和OperationContractAttribute应用于类,在这种情况下,WCF使用OperationContractAttribute从类中推断出一个服务合同和方法。这是一种应该尽量避免使用的技术:

 

  1. //尽量避免使用  
  2. [ServiceContract]  
  3. class MyService  
  4. {  
  5. [OperationContract] //可见性并不要紧  
  6. string MyMethod(string text)  
  7. {  
  8. return "Hello " + text;  
  9. }  
  10. public string MyOtherMethod(string text)  
  11. {  
  12. return "Cannot call this method over WCF";  
  13. }  
  14. }  

这个ServiceContractAttribute把CLR接口(或推断的接口)映射到一个技术中立的WCF合同上。通过派生和实现多个带有ServiceContractAttribute的接口,单个类可以支持多个合同。类能够通过隐式或显式方式实现这个接口,因为该方法可见性对WCF没有任何影响。然而,存在许多实现约束:避免使用参数化的构造器,因为WCF仅使用默认的构造器。尽管该类能够使用内部属性,索引器和静态成员,但是没有WCF客户端能够存取它们。

以上就是我们为大家介绍的有关WCF服务合同的相关内容。

责任编辑:曹凯 来源: qqread.com
相关推荐

2010-03-02 17:55:37

WCF终结点地址

2010-02-25 17:04:54

WCF实例上下文

2010-02-25 17:51:04

WCF服务地址

2010-02-25 15:49:05

WCF消息模式

2010-01-28 15:33:37

Android程序架构

2010-02-06 13:58:13

C++ Bost库

2010-02-02 15:12:09

C++ explici

2010-02-05 13:35:19

C++虚析构函数

2010-02-25 17:57:26

WCF服务合同

2010-01-04 15:21:37

Silverlight

2010-04-22 09:36:56

Oracle数据字典

2010-03-05 11:53:20

Python命名约定

2017-10-25 06:50:27

数据科学数据数据分析

2010-02-05 10:08:55

C++名字空间

2010-02-04 15:51:07

C++迭代器

2010-03-03 15:26:54

Python编码规范

2010-02-25 09:36:28

WCF行为控制

2010-05-11 14:19:52

MySQL 5.0

2010-04-12 12:52:54

WiMAX无线技术

2009-09-10 10:47:05

C# form
点赞
收藏

51CTO技术栈公众号