Поделиться через


MetadataImporter Класс

Определение

Импорт метаданных в ServiceEndpoint объекты.

public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
Наследование
MetadataImporter
Производный

Примеры

В следующем примере показано использование производного System.ServiceModel.Description.WsdlImporter класса для импорта метаданных с помощью пользовательского состояния, проверки Errors свойства, компиляции импортированных метаданных в управляемые типы и сохранения результата в файле кода.

  static void GenerateCSCodeForService(EndpointAddress metadataAddress, string outputFile)
  {
MetadataExchangeClient mexClient = new MetadataExchangeClient(metadataAddress);
mexClient.ResolveMetadataReferences = true;
MetadataSet metaDocs = mexClient.GetMetadata();

      WsdlImporter importer = new WsdlImporter(metaDocs);
ServiceContractGenerator generator = new ServiceContractGenerator();

// Add our custom DCAnnotationSurrogate
// to write XSD annotations into the comments.
object dataContractImporter;
XsdDataContractImporter xsdDCImporter;
if (!importer.State.TryGetValue(typeof(XsdDataContractImporter), out dataContractImporter))
{
  Console.WriteLine("Couldn't find the XsdDataContractImporter! Adding custom importer.");
  xsdDCImporter = new XsdDataContractImporter();
  xsdDCImporter.Options = new ImportOptions();
  importer.State.Add(typeof(XsdDataContractImporter), xsdDCImporter);
}
else
{
  xsdDCImporter = (XsdDataContractImporter)dataContractImporter;
  if (xsdDCImporter.Options == null)
  {
    Console.WriteLine("There were no ImportOptions on the importer.");
    xsdDCImporter.Options = new ImportOptions();
  }
}
xsdDCImporter.Options.DataContractSurrogate = new DCAnnotationSurrogate();

// Uncomment the following code if you are going to do your work programmatically rather than add
// the WsdlDocumentationImporters through a configuration file.
/*
// The following code inserts a custom WsdlImporter without removing the other
// importers already in the collection.
System.Collections.Generic.IEnumerable<IWsdlImportExtension> exts = importer.WsdlImportExtensions;
System.Collections.Generic.List<IWsdlImportExtension> newExts
  = new System.Collections.Generic.List<IWsdlImportExtension>();
foreach (IWsdlImportExtension ext in exts)
{
  Console.WriteLine("Default WSDL import extensions: {0}", ext.GetType().Name);
  newExts.Add(ext);
}
newExts.Add(new WsdlDocumentationImporter());
System.Collections.Generic.IEnumerable<IPolicyImportExtension> polExts = importer.PolicyImportExtensions;
importer = new WsdlImporter(metaDocs, polExts, newExts);
*/

System.Collections.ObjectModel.Collection<ContractDescription> contracts
  = importer.ImportAllContracts();
importer.ImportAllEndpoints();
      foreach (ContractDescription contract in contracts)
      {
          generator.GenerateServiceContractType(contract);
      }
if (generator.Errors.Count != 0)
  throw new Exception("There were errors during code compilation.");

// Write the code dom
System.CodeDom.Compiler.CodeGeneratorOptions options
  = new System.CodeDom.Compiler.CodeGeneratorOptions();
      options.BracingStyle = "C";
      System.CodeDom.Compiler.CodeDomProvider codeDomProvider
  = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("C#");
      System.CodeDom.Compiler.IndentedTextWriter textWriter
  = new System.CodeDom.Compiler.IndentedTextWriter(new System.IO.StreamWriter(outputFile));
      codeDomProvider.GenerateCodeFromCompileUnit(
  generator.TargetCompileUnit, textWriter, options
);
      textWriter.Close();
  }

Комментарии

Используйте реализацию абстрактного MetadataImporter класса для импорта метаданных службы. Типы, производные от MetadataImporter класса, реализуют поддержку импорта форматов метаданных, которые используют логику импорта WS-Policy в Windows Communication Foundation (WCF).

Реализация MetadataImporter собирает выражения политики, присоединенные к метаданным службы в объекте System.ServiceModel.Description.PolicyConversionContext . Затем MetadataImporter обрабатывает политики как часть импорта метаданных, вызывая реализации интерфейса System.ServiceModel.Description.IPolicyImportExtension в свойстве MetadataImporter.PolicyImportExtensions.

Вы можете добавить поддержку импорта утверждений новой политики в a MetadataImporter , добавив собственную реализацию System.ServiceModel.Description.IPolicyImportExtension интерфейса в MetadataImporter.PolicyImportExtensions свойство в MetadataImporter экземпляре. Кроме того, вы можете зарегистрировать расширение импорта политики в файле конфигурации приложения.

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

Вы можете добавить поддержку импорта расширений WSDL, реализовав интерфейс System.ServiceModel.Description.IWsdlImportExtension, а затем добавив реализацию в свойство WsdlImporter.WsdlImportExtensions вашего экземпляра System.ServiceModel.Description.WsdlImporter. Также System.ServiceModel.Description.WsdlImporter может загружать реализации интерфейса System.ServiceModel.Description.IWsdlImportExtension, зарегистрированные в файле конфигурации приложения.

Замечание

MetadataImporter Так как конструктор является внутренним, вы не можете наследоваться в MetadataImporter этой версии.

Свойства

Имя Описание
Errors

Возвращает значение, указывающее, были ли ошибки при импорте метаданных.

KnownContracts

Получает словарь контрактов по имени, о том, о чем знает импортер.

PolicyImportExtensions

Возвращает коллекцию импортеров политик, которые импортер вызывает для обработки утверждений политики.

State

Возвращает или задает коллекцию объектов, используемых при импорте метаданных.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
ImportAllContracts()

При переопределении в производном классе возвращает коллекцию контрактов, импортированных из метаданных.

ImportAllEndpoints()

При переопределении в производном классе возвращает все конечные точки в метаданных.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к