在 Windows Communication Foundation(WCF)中,元数据导出是描述服务终结点并将其投影到并行标准化表示形式的过程,客户端可以使用这些表示形式来了解如何使用该服务。 自定义元数据由系统提供的元数据导出程序无法导出的 XML 元素组成。 通常,这包括用户定义的行为的自定义 WSDL 元素,以及绑定元素以及有关绑定和协定的功能和要求的策略断言。
本部分介绍导出自定义 WSDL 或策略断言,不专注于导出过程本身。 有关如何使用导出和导入元数据的类型的详细信息,无论元数据是自定义还是系统构造,请参阅 导出和导入元数据。
概述
当使用 System.ServiceModel.Description.ServiceMetadataBehavior 发布元数据时,会检查 System.ServiceModel.Description.ServiceDescription,并为 WCF 可用系统提供的属性和绑定提供支持的所有协定和绑定生成 XSD 和 WSDL(包括策略断言)。 但是,自定义行为属性或绑定元素需要支持才能正确导出它们。
本部分介绍:
如何实现和使用 System.ServiceModel.Description.IWsdlExportExtension 接口,该接口在发布 WSDL 之前会向你公开 WSDL 生成数据。
如何实现和使用 System.ServiceModel.Description.IPolicyExportExtension 接口,该接口在导出 WSDL 数据中的策略断言之前会向你公开策略数据。
有关导入自定义 WSDL 和策略断言的详细信息,请参阅 导入 WCF 扩展的自定义元数据。
导出自定义 WSDL 元素
实现IWsdlExportExtension作为操作行为、协定行为、终结点行为或绑定元素(分别对应IOperationBehavior、IContractBehavior、IEndpointBehavior或System.ServiceModel.Channels.BindingElement),然后将这些行为或绑定元素插入到您尝试导出的服务说明中。 (有关插入行为的详细信息,请参阅 使用行为配置和扩展运行时)。 为每个终结点调用 IWsdlExportExtension,然后每个终结点首先导出协定(如果协定尚未导出)。 可以根据需求参与任一导出过程:
使用 WsdlContractConversionContext 修改 ExportContract 方法中的导出的元数据。
使用 WsdlEndpointConversionContext 修改 ExportEndpoint 方法导出的终结点的元数据。
在导出的ExportContract实例中所有IWsdlExportExtension实现上调用System.ServiceModel.Description.ContractDescription方法。 在正在导出的 ExportEndpoint 实例中,所有 IWsdlExportExtension 实现上都会调用 System.ServiceModel.Description.ServiceEndpoint 方法。
有关详细信息,请参阅 如何:导出自定义 WSDL 和示例 自定义 WSDL 发布。
导出自定义策略断言
在 IPolicyExportExtension 上实现 BindingElement,并将绑定元素添加到绑定中,以便将有关绑定支持和协定功能的自定义策略声明写入 WSDL。 导出绑定中实现的绑定元素时,会调用一次IPolicyExportExtension,并将PolicyConversionContext传递给ExportPolicy方法。 使用 PolicyConversionContext 实例的方法,可以向附加到 WSDL 绑定的消息、操作或终结点主题的策略断言进行添加操作。
有关详细信息,请参阅 “如何:导出自定义策略断言”。