导出 WCF 扩展的自定义元数据

在 Windows Communication Foundation (WCF) 中,元数据导出是描述服务终结点并将它们投影到客户端可用来了解如何使用服务的并行、标准化表示形式的过程。 自定义元数据包含系统提供的元数据导出程序无法导出的 XML 元素。 通常,这包括自定义 WSDL 元素(用于用户定义的行为)、绑定元素和策略断言(与绑定和协定的功能和需求有关)。

本节介绍如何导出自定义 WSDL 或策略断言,而不关注导出过程本身。 有关如何使用用于导出和导入元数据(无论元数据是自定义还是由系统构造)的类型的详细信息,请参阅导出和导入元数据

概述

当使用 System.ServiceModel.Description.ServiceMetadataBehavior 发布元数据时,会检查 System.ServiceModel.Description.ServiceDescription,并为 WCF 可用系统提供的属性和绑定提供支持的所有协定和绑定生成 XSD 和 WSDL(包括策略断言)。 但是,自定义行为属性或绑定元素需要获得支持才能正确导出。

本节介绍以下内容:

  1. 如何实现和使用 System.ServiceModel.Description.IWsdlExportExtension 接口,该接口在发布 WSDL 之前向您公开 WSDL 生成数据。

  2. 如何实现和使用 System.ServiceModel.Description.IPolicyExportExtension 接口,该接口在导出 WSDL 数据中的策略断言之前向您公开策略数据。

有关导入自定义 WSDL 和策略断言的详细信息,请参阅导入 WCF 扩展的自定义元数据

导出自定义 WSDL 元素

在操作行为、协定行为、终结点行为或绑定元素(分别为 IWsdlExportExtensionIOperationBehaviorIContractBehaviorIEndpointBehavior)上实现 System.ServiceModel.Channels.BindingElement,并将行为或绑定元素插入正试图导出的服务的说明中。 (有关插入行为的详细信息,请参阅使用行为配置和扩展运行时)。 为每个终结点调用 IWsdlExportExtension,然后每个终结点首先导出协定(如果协定尚未导出)。 您可以执行以下任一导出过程,具体取决于您的需要:

在正在导出的 ExportContract 实例中,所有 IWsdlExportExtension 实现上都会调用 System.ServiceModel.Description.ContractDescription 方法。 在正在导出的 ExportEndpoint 实例中,所有 IWsdlExportExtension 实现上都会调用 System.ServiceModel.Description.ServiceEndpoint 方法。

有关详细信息,请参阅如何:导出自定义 WSDL 和示例自定义 WSDL 发布

导出自定义策略断言

IPolicyExportExtension 上实现 BindingElement 并将绑定元素添加到绑定,可以将有关绑定支持和协定功能的自定义策略断言写入 WSDL。 在导出绑定中的已实现绑定元素后,即会调用 IPolicyExportExtension,并将 PolicyConversionContext 传递到 ExportPolicy 方法。 使用 PolicyConversionContext 实例的方法,可以向附加到 WSDL 绑定的消息、操作或终结点主题的策略断言进行添加操作。

有关详细信息,请参阅如何:导出自定义策略断言

请参阅