Экспорт пользовательских метаданных для расширения WCF
В среде Windows Communication Foundation (WCF) экспорт метаданных представляет собой процесс описания конечных точек службы и проецирования их в параллельное, стандартизованное представление, позволяющее клиентам понять, как использовать службу. Пользовательские метаданные состоят из элементов XML, которые не могут быть экспортированы с помощью средств экспорта метаданных, предоставляемых системой. Обычно сюда входят пользовательские элементы WSDL для определенных пользователем поведений, элементов привязки и утверждений политики о возможностях и требованиях привязок и контрактов.
В этом разделе описано, как экспортировать пользовательские элементы WSDL и утверждения политики, но при этом не рассматривается сам процесс экспорта. Дополнительные сведения об использовании типов, которые экспортируют и импортируют метаданные независимо от того, являются ли они пользовательскими или созданными системой, см. в разделе Экспорт и импорт метаданных.
Общие сведения
При публикации метаданных с использованием System.ServiceModel.Description.ServiceMetadataBehavior производится проверка System.ServiceModel.Description.ServiceDescription и создаются XSD и WSDL -- включая утверждения политики -- для всех контрактов и привязок, поддерживаемых WCF с использованием предоставляемых системой атрибутов и привязок. Однако для правильного экспорта пользовательских атрибутов поведения или элементов привязки требуется их поддержка.
В данном разделе рассматриваются следующие вопросы.
Реализация и использование интерфейса 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 в субъектах сообщения, операции или конечной точки.
Дополнительные сведения см. в разделе Как экспортировать утверждения пользовательской политики.
См. также
Задачи
Как экспортировать пользовательскую информацию WSDL
Как экспортировать утверждения пользовательской политики