对于WCF服务端元数据架构体系来说,通过MetadataExporter将服务的终结点导出成MetadataSet(参考《如何导出WCF服务的元数据》),仅仅是完成了一半的工作。被成功导出的以MetadataSet对象表示的元数据需要最终作为可被访问的网络资源发布出来,才能被服务消费者获取,进而有效地帮助他们进行服务调用。元数据的发布最终是通过ServiceMetadataBehavior这样一个服务行为实现的,我们先来认识一下ServiceMetadataBehavior

ServiceMetadataBehavior是一个实现了IServiceBehavior的服务行为,它实现了基于如下两种协议的元数据发布模式:

  • HTTP-GET:采用HTTP协议的Get操作,向元数据目标地址发送HTTP请求,并以查询字符串(QueryString)的形式表示相应的查询参数。元数据最终以HTTP回复的形式返回;
  • WS-MEX:元数据提供者按照WS-MEX规范创建终结点发布元数据,元数据消费者创建同样基于WS-MEX的终结点与之交互,并最终通过SOAP的形式获取元数据。关于WS-MEX,可以参考我的文章《元数据(Metadata)架构体系全景展现[WS标准篇]

我们首先通过如下得代码来看看ServiceMetadataBehavior的定义,ServiceMetadataBehavior实现IServiceBehavior接口,并将所有发布元数据的行为定义在ApplyDispatchBehavior方法中。

class ServiceMetadataBehavior : IServiceBehavior
   2: {
   3:    
//其他成员
void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection parameters);
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase);
void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase);
   8:  
public Uri ExternalMetadataLocation { get; set; }    
  10:  
//HTTP
bool HttpGetEnabled { get; set; }
public Uri HttpGetUrl { get; set; }
public Binding HttpGetBinding { get; set; }
  15:  
//HTTPS
bool HttpsGetEnabled { get; set; }
public Binding HttpsGetBinding { get; set; }
public Uri HttpsGetUrl { get; set; }
  20:  
public MetadataExporter MetadataExporter { get; set; }
  22: }

相关文章:

  • 2021-09-12
  • 2022-01-23
  • 2021-09-03
  • 2021-06-24
  • 2021-10-06
  • 2021-11-10
  • 2021-11-07
猜你喜欢
  • 2021-08-06
  • 2021-10-23
  • 2021-12-15
  • 2021-03-31
  • 2021-12-31
  • 2022-12-23
相关资源
相似解决方案