在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy、WS-Transfer和WSDL,因为WCF元数据结构体系完全是基于WS-MEX等相关的规范之上。熟悉这些基本的WS规范,对于我们全面、深刻的理解WCF整个元数据架构体系具有十分重要的意义。不仅仅是针对元数据,对于后续章节陆续要介绍的内容,比如事务、可靠会话、安全等,我强烈建议读者在正式进行相关部分的学习之前,先对相关的WS规范作一个大致的了解。
通过对WS-MEX的介绍,我们知道:不论是采用WS-Transfer Get操作还是Get Metadata操作,获取到的元数据被封装到回复消息主体部分的<Metadata>结点中,而<Metadata>是一组<MetadataSection>元素的集合。在托管的世界里,<MetadataSection>元素和<MetadataSection>元素集合有相应的类型来表示,那就是我们接下来要着重介绍的MetadataSection和MetadataSet。
MetadataSection定义在System.ServiceModel.Description命名空间下,用于用于定义基于某种方言(Dialect)的元数据,该类型和WS-MEX中包含元数据SOAP消息主体的<MetadataSection>结点相匹配。我们不妨现在看看MetadataSection的定义:
)]
class MetadataSection
3: {
//其他成员
public MetadataSection();
object metadata);
7:
8: [XmlAnyAttribute]
public Collection<XmlAttribute> Attributes { get; }
10: [XmlAttribute]
string Dialect { get; set; }
12: [XmlAttribute]
string Identifier { get; set; }
)]
)]
)]
)]
)]
19: [XmlAnyElement]
object Metadata { get; set; }
21:
//四种预定义元数据方言(Dialect)
//MEX:http://schemas.xmlsoap.org/ws/2004/09/mex
string MetadataExchangeDialect { get; }
//WS-Policy:http://schemas.xmlsoap.org/ws/2004/09/policy
string PolicyDialect { get; }
//WSDL:http://schemas.xmlsoap.org/wsdl/
string ServiceDescriptionDialect { get; }
//XML Schema:http://www.w3.org/2001/XMLSchema
string XmlSchemaDialect { get; }
31: }