导出 WCF 扩展的自定义元数据
在 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 元素
在操作行为、协定行为、终结点行为或绑定元素(分别为 IOperationBehavior、IContractBehavior、IEndpointBehavior 或 System.ServiceModel.Channels.BindingElement)上实现 IWsdlExportExtension,并将行为或绑定元素插入正试图导出的服务的说明中。(有关插入行为的更多信息,请参见使用行为配置和扩展运行时)。为每个终结点调用 IWsdlExportExtension,然后每个终结点首先导出协定(如果协定尚未导出)。您可以执行以下任一导出过程,具体取决于您的需要:
使用 WsdlContractConversionContext 修改 ExportContract 方法中导出的元数据。
使用 WsdlEndpointConversionContext 修改 ExportEndpoint 方法导出的终结点的元数据。
在正在导出的 System.ServiceModel.Description.ContractDescription 实例中,所有 IWsdlExportExtension 实现上都会调用 ExportContract 方法。在正在导出的 System.ServiceModel.Description.ServiceEndpoint 实例中,所有 IWsdlExportExtension 实现上都会调用 ExportEndpoint 方法。
有关更多信息,请参见如何:导出自定义 WSDL 和示例自定义 WSDL 发布。
导出自定义策略断言
在 BindingElement 上实现 IPolicyExportExtension 并将绑定元素添加到绑定,可以将有关绑定支持和协定功能的自定义策略断言写入 WSDL。在导出绑定中的已实现绑定元素后,即会调用 IPolicyExportExtension,并将 PolicyConversionContext 传递到 ExportPolicy 方法。使用 PolicyConversionContext 实例的方法,可以向附加到 WSDL 绑定的消息、操作或终结点主题的策略断言进行添加操作。
有关更多信息,请参见如何:导出自定义策略断言。