图文演示WCF服务元数据结构模式

开发 后端
这里简单的介绍了WCF服务元数据和在WCF,以MetadataExchangeClientMode枚举类型表示这两种元数据交换模式,希望对大家有帮助。

WCF经过长时间的发展,很多用户都很了解WCF服务元数据了,这里我发表一下个人理解,和大家讨论讨论。所谓获取WCF服务元数据(Metadata),归根结点,实际上就是获取服务的终结点(Endpoint)的信息,这是服务公开在外的数据信息,包括Address、Binding与Contract,也就是所谓的ABCs。Juval L?wy在《Programming WCF Services》一书中,用生动形象的棒棒糖表示了终结点的构成:

在WCF中获取服务元数据信息(图一)


WCF服务元数据可能包含多个终结点,每个终结点相当于是通信的入口,客户端和服务端通过终结点交换信息,如下图所示:

在WCF中获取服务元数据信息(图二)

#T#因而,如果能够获取终结点的详细信息,有助于我们更好地剖析服务的定义、内容与执行方式。服务有两种方案可以发布自己的元数据。一种是基于HTTP-GET协议提供元数据;另一种则为元数据交换方式,它往往使用一个专门的终结点,称之为元数据交换终结点。元数据交换终结点与其它终结点相似,仍然包含了地址、绑定与契约,但是使用的服务契约为WCF提供的接口 IMetadataExchange。实际上,这两种发布元数据的方式代表了它使用了两种不同的标准协议,前者为HTTP/GET请求,后者为WS-MetadataExchange(MEX)。在WCF,以MetadataExchangeClientMode枚举类型表示这两种元数据交换模式:

  1. public enum MetadataExchangeClientMode  
  2. {  
  3. MetadataExchange,  
  4. HttpGet  

WCF为终结点定义了一个专门的ServiceEndpoint类,被定义在 System.ServiceModel.Description命名空间中。ServiceEndpoint类包含了 EndpointAddress,Binding,ContractDescription三个类型的属性,分别对应Endpoint的 Address,Binding,Contract,如下图:

在WCF中获取服务元数据信息(图三)

要获取服务的终结点,可以通过抽象类MetadataImporter获取,类的定义如下:

  1. public abstract class MetadataImporter  
  2. {  
  3. public abstract Collection ImportAllContracts();  
  4. public abstract ServiceEndpointCollection ImportAllEndpoints();  
  5. //其它方法略;  

在类中,最重要的一个方法是ImportAllEndpoints(),它能够获取服务的所有终结点,并返回一个 ServiceEndpointCollection类型的对象。该类型为一个终结点集合,可以通过调用 ServiceEndpointCollection的Find()方法或FindAll()方法,找到符合条件的一个或多个终结点。它的定义如下:

  1. public class ServiceEndpointCollection : Collection  
  2. {  
  3. public ServiceEndpoint Find(Type contractType);  
  4. public ServiceEndpoint Find(Uri address);  
  5. public Collection FindAll(Type contractType);  
  6. //其它成员略  

我们可以通过契约类型,或者服务契约的地址,查找符合条件的终结点。

责任编辑:田树 来源: 博客
相关推荐

2009-11-09 13:12:14

WCF事物操作

2009-11-05 16:34:37

WCF序列化

2009-11-05 09:35:54

WCF体系架构

2009-12-22 16:14:01

WCF服务元数据

2009-11-06 09:30:35

WCF服务框架

2009-11-12 09:51:59

ADO.NET结构

2009-11-05 10:07:37

WCF设计模式

2009-11-06 10:01:07

WCF服务元数据

2009-12-21 16:37:41

WCF获取服务元数据

2024-08-12 16:09:31

2010-04-08 09:27:04

PHP设计模式结构模式

2024-08-20 14:31:16

2009-07-01 09:43:40

WCF安全元数据

2009-11-09 17:30:20

WCF元数据

2009-11-06 10:45:47

WCF服务元数据交换

2010-06-02 10:36:41

SVN开发

2010-02-22 11:02:06

WCF元数据

2010-05-25 09:02:09

2021-04-12 15:47:00

数据结构算法链表

2023-02-28 09:10:28

设计模式解耦数据
点赞
收藏

51CTO技术栈公众号