Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В Windows Communication Foundation (WCF) импорт метаданных — это процесс создания абстрактного представления службы или ее компонентов из метаданных. Например, WCF может импортировать экземпляры ServiceEndpoint, Binding или ContractDescription из документа WSDL для службы. Чтобы импортировать метаданные службы в WCF, используйте реализацию абстрактного System.ServiceModel.Description.MetadataImporter класса. Типы, производные от MetadataImporter класса, реализуют поддержку импорта форматов метаданных, которые используют логику импорта WS-Policy в WCF.
Пользовательские метаданные состоят из XML-элементов, которые не могут быть импортированы импортерами метаданных, предоставляемыми системой. Как правило, это включает пользовательские расширения WSDL и утверждения пользовательской политики.
В этом разделе описывается импорт пользовательских расширений WSDL и утверждений политик. Он не фокусируется на самом процессе импорта. Дополнительные сведения об использовании типов, экспортируемых и импортируемых метаданных независимо от того, являются ли метаданные настраиваемыми или системными, см. в разделе "Экспорт и импорт метаданных".
Обзор
Тип System.ServiceModel.Description.WsdlImporter — это реализация абстрактного класса, включенного MetadataImporter в WCF. Тип WsdlImporter импортирует метаданные WSDL с присоединенными политиками, которые упаковываются в System.ServiceModel.Description.MetadataSet объект. Утверждения политики и расширения WSDL, которые импортеры по умолчанию не распознают, передаются любым зарегистрированным пользовательским политикам и средствам импорта WSDL для импорта. Как правило, импорты реализуются для поддержки определяемых пользователем элементов привязки или изменения импортированного контракта.
В этом разделе описано:
Как реализовать и использовать System.ServiceModel.Description.IWsdlImportExtension интерфейс, предоставляющий данные WSDL пользовательским импортерам до создания описаний и создания кода. Этот интерфейс можно использовать для проверки или изменения типов описания и компиляции кода, выполняемой с помощью заданного набора метаданных.
Как реализовать и использовать System.ServiceModel.Description.IPolicyImportExtension интерфейс, который предоставляет утверждения политики импортерам до создания объектов описания. Этот интерфейс можно использовать для проверки или изменения привязки или контракта на основе скачанных политик.
Дополнительные сведения об экспорте пользовательских утверждений WSDL и политик см. в разделе "Экспорт настраиваемых метаданных" для расширения WCF.
Импорт пользовательских расширений WSDL
Чтобы добавить поддержку импорта расширений WSDL, реализуйте интерфейс IWsdlImportExtension, затем добавьте свою реализацию в свойство WsdlImportExtensions. Также WsdlImporter может загружать реализации интерфейса IWsdlImportExtension, зарегистрированные в файле конфигурации приложения. Обратите внимание, что по умолчанию зарегистрировано несколько импортеров WSDL, а порядок зарегистрированных импортеров WSDL является значительным.
Когда пользовательский импорт WSDL загружается и используется WsdlImporter, сначала вызывается метод BeforeImport для изменения метаданных до процесса импорта. Затем контракты импортируются, после чего вызывается метод ImportContract, чтобы обеспечить возможность изменения контрактов, импортированных из метаданных. Наконец, вызывается метод ImportEndpoint, чтобы разрешить изменение импортированных конечных точек.
Дополнительные сведения см. в разделе "Практическое руководство: Импорт пользовательского WSDL".
Импорт пользовательских утверждений политики
Тип WsdlImporter и средство служебной программы метаданных ServiceModel (Svcutil.exe) автоматически обрабатывают обработку различных типов утверждений политики в выражениях политик, подключенных к документам WSDL. Эти средства собирают, нормализуют и объединяют выражения политики, подключенные к привязкам WSDL и портам WSDL.
Чтобы добавить поддержку импорта утверждений пользовательской политики, реализуйте интерфейс IPolicyImportExtension и добавьте реализацию в свойство PolicyImportExtensions. Также MetadataImporter может загружать реализации интерфейса IPolicyImportExtension, зарегистрированные в файле конфигурации приложения. Обратите внимание, что по умолчанию зарегистрировано несколько импортеров политик, а порядок зарегистрированных импортеров политик является важным.
Система метаданных повторно вызывает метод IPolicyImportExtension.ImportPolicy для всех зарегистрированных расширений импорта политики для каждого сочетания альтернативных политик, привязанных к сообщению, операции и субъектам политики конечного пункта. При импорте порта WSDL политики, подключенные к порту и соответствующей привязке WSDL, объединяются перед вызовом расширений импорта политики. Альтернативы политики предоставляются через PolicyConversionContext в виде объектов PolicyAssertionCollection. Каждая PolicyAssertionCollection является коллекцией утверждений политики, представленных объектами XmlElement.
Свойства Contract и BindingElements объекта PolicyConversionContext раскрывают ContractDescription и BindingElement объекты, которые были импортированы из WSDL. Процесс расширений импорта политики обрабатывает утверждения политики, находя экземпляры определенного типа утверждения политики, вносит соответствующие изменения в объекты ContractDescription или BindingElement и затем удаляет утверждения политики из соответствующего экземпляра PolicyAssertionCollection.
wsp:Optional Атрибуты и вложенные выражения политики не нормализуются, поэтому расширения импорта политик должны обрабатывать эти конструкции политики. Кроме того, расширения импорта политик могут вызываться несколько раз с одинаковыми ContractDescription и BindingElement объектами, поэтому расширения импорта политик должны быть надежными для этого поведения.
Это важно
Недопустимые или неправильные метаданные могут быть переданы импортёру. Убедитесь, что пользовательские импорты являются надежными для всех форм XML.