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


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.

Можно добавить поддержку для импорта новых утверждений политики в 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)

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