元資料導出不僅包含 WSDL 結構,還涉及繫結相關的 WS-Policy 斷言。WCF 提供兩種擴展機制:WSDL 匯出擴展(IWsdlExportExtension)與 策略匯出擴展(IPolicyExportExtension)。
需實作 IWsdlExportExtension 介面,包含兩方法:
public interface IWsdlExportExtension
{
void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context);
void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context);
}
適用對象:繫結元素(BindingElement)、端點行為、契約行為、操作行為(服務行為不適用)。WsdlExporter 在 ExportContract/ExportEndpoint 結束前,會遍歷所有實作此介面的擴展,將導出的元資料寫入對應的 WsdlContractConversionContext 或 WsdlEndpointConversionContext。
專門處理 WS-Policy 斷言導出。繫結元素實作 IPolicyExportExtension:
public interface IPolicyExportExtension
{
void ExportPolicy(MetadataExporter exporter, PolicyConversionContext context);
}
WsdlExporter.ExportEndpoint 最後階段會建立 PolicyConversionContext,遍歷所有實作此介面的繫結元素呼叫 ExportPolicy,將策略斷言寫入該 Context,最後附加到 WsdlEndpointConversionContext,使最終導出的 WSDL 包含對應的 Policy 斷言(如 WS-Security、WS-ReliableMessaging 等)。