Экспорт и импорт метаданных

В Windows Communication Foundation (WCF) экспорт метаданных — это процесс описания конечных точек службы и проецирования их в параллельно стандартизированное представление, которое клиенты могут использовать для понимания использования службы. Импорт метаданных службы - это процесс создания экземпляров ServiceEndpoint или частей из метаданных службы.

Экспорт метаданных

Для экспорта метаданных из экземпляров System.ServiceModel.Description.ServiceEndpoint используется реализация абстрактного класса MetadataExporter. Тип WsdlExporter — это реализация абстрактного класса, включенного MetadataExporter в WCF.

Тип System.ServiceModel.Description.WsdlExporter создает метаданные языка описания веб-служб (WSDL) с присоединенными выражениями политики в экземпляре MetadataSet. Экземпляр System.ServiceModel.Description.WsdlExporter можно использовать для итерационного экспорта метаданных для объектов ContractDescription и объектов ServiceEndpoint. Можно также экспортировать коллекцию объектов ServiceEndpoint и связать их с определенным именем службы.

Примечание.

WsdlExporter может использоваться только для экспорта метаданных из экземпляров ContractDescription, в которых содержатся сведения о типе среды CLR, например, экземпляр ContractDescription, созданный с помощью метода ContractDescription.GetContract или созданный как часть ServiceDescription для экземпляра ServiceHost. Нельзя использовать WsdlExporter для экспорта метаданных из экземпляров ContractDescription, импортированных из метаданных службы или созданных без сведений о типе.

Импорт метаданных

Импорт документов WSDL

Чтобы импортировать метаданные службы в WCF, используйте реализацию абстрактного MetadataImporter класса. Тип System.ServiceModel.Description.WsdlImporter — это реализация абстрактного класса, включенного MetadataImporter в WCF. Тип WsdlImporter импортирует метаданные языка WSDL с прикрепленными политиками, объединенными в объекте MetadataSet.

Тип WsdlImporter позволяет контролировать способ импорта метаданных. Можно импортировать все конечные точки, все привязки или все контракты. Можно импортировать все конечные точки, связанные с определенной службой, привязкой или типом порта WSDL. Можно также импортировать конечную точку для определенного порта WSDL, привязку для определенной привязки WSDL или контракт для определенного типа порта WSDL.

WsdlImporter также предоставляет свойство KnownContracts, позволяющее задать набор контрактов, которые не требуется импортировать. WsdlImporter использует контракты из свойства KnownContracts, вместо того, чтобы импортировать контракты с тем же полным именем из метаданных.

Импорт политик

Тип WsdlImporter собирает выражения политики, присоединенные к субъектам политики сообщения, операции и конечной точки, а затем использует реализации IPolicyImportExtension в коллекции PolicyImportExtensions для импорта выражений политики.

Логика импорта политики автоматически обрабатывает ссылки политики на выражения политики в этом же документе WSDL и указывается атрибутом wsu:Id или xml:id. Логика импорта политики защищает приложения от циклических ссылок политики, ограничивая размер выражения политики 4096 узлами, где узлом является один из следующих элементов: wsp:Policy, wsp:All, wsp:ExactlyOne, wsp:policyReference.

Логика импорта политики также автоматически нормализует выражения политики. Вложенные выражения политики и атрибут wsp:Optional не нормализуются. Объем обработки для нормализации ограничен 4096 шагами, где каждый шаг дает утверждение политики или дочерний элемент элемента wsp:ExactlyOne.

Тип WsdlImporter пробует до 32 комбинацией альтернативных политик, присоединенных к различным субъектам политики WSDL. Если ни одну из этих комбинацией не удается импортировать без ошибок, первая комбинация используется для создания частичной пользовательской привязки.

Обработка ошибок

Типы MetadataExporter и MetadataImporter предоставляют свойство Errors, которое может содержать коллекцию сообщений об ошибках и предупреждениях, возникших во время экспорта и импорта соответственно, и которую можно использовать при реализации средств.

Тип WsdlImporter обычно создает исключение для исключения, перехваченного в процессе импорта, и добавляет соответствующую ошибку в свое свойство Errors. Однако методы ImportAllContracts, ImportAllBindings, ImportAllEndpoints и ImportEndpoints не создают такие исключения, поэтому необходимо проверять свойство Errors, чтобы определить, не было ли каких-либо проблем при вызове этих методов.

Тип WsdlExporter заново создает все исключения, перехваченные во время процесса экспорта. Эти исключения не записываются в виде ошибок в свойство Errors. После того, как WsdlExporter создал исключение, он находится в состоянии ошибки и не может использоваться повторно. WsdlExporter не добавляет предупреждения в свое свойство Errors, если экспорт операции невозможен из-за использования подстановочных действий или если обнаружены одинаковые имена привязок.

В этом разделе

Практическое руководство. Импорт метаданных в конечные точки службы
Описание порядка импорта загруженных метаданных в объекты описания.

Практическое руководство. Экспорт метаданных из конечных точек службы
Описание порядка экспорта объектов описания в метаданные.

ServiceDescription и справочная информация о WSDL
Описание сопоставления объектов описания и языка WSDL.

Практическое руководство. Использование программы Svcutil.exe для экспорта метаданных из скомпилированного кода службы
Описание использования средства Svcutil.exe для экспорта метаданных служб, контрактов и типов данных в скомпилированных сборках.

Справочник по схеме контрактов данных
Описание подмножества схемы XML (XSD), используемого DataContractSerializer для описания типов среды CLR, применяемых для сериализации XML.

Справочные материалы

WsdlExporter

WsdlImporter

См. также