MetadataImporter Classe

Definição

Importa metadados para ServiceEndpoint os objetos.

public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
Herança
MetadataImporter
Derivado

Exemplos

O exemplo seguinte mostra a utilização da System.ServiceModel.Description.WsdlImporter classe derivada para importar metadados usando estado personalizado, verificando a Errors propriedade, compilando metadados importados para tipos geridos e guardando o resultado num ficheiro de código.

  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();
  }

Observações

Use uma implementação da MetadataImporter classe abstracta para importar metadados do serviço. Os tipos derivados da classe MetadataImporter implementam suporte para importar formatos de metadados que tiram partido da lógica de importação WS-Policy em Windows Communication Foundation (WCF).

Uma MetadataImporter implementação coleta as expressões de política anexadas aos metadados de serviço em um System.ServiceModel.Description.PolicyConversionContext objeto. O MetadataImporter processa as políticas como uma parte da importação dos metadados ao chamar as implementações da interface System.ServiceModel.Description.IPolicyImportExtension na propriedade MetadataImporter.PolicyImportExtensions.

Pode adicionar suporte para importar novas asserções de políticas adicionando MetadataImporter a sua própria implementação da System.ServiceModel.Description.IPolicyImportExtension interface à MetadataImporter.PolicyImportExtensions propriedade numa MetadataImporter instância. Em alternativa, pode registar a extensão de importação da sua apólice no ficheiro de configuração da sua aplicação.

O System.ServiceModel.Description.WsdlImporter tipo é a implementação da MetadataImporter classe abstrata incluída no WCF. O System.ServiceModel.Description.WsdlImporter tipo importa metadados WSDL com políticas anexadas que são agrupadas em um System.ServiceModel.Description.MetadataSet objeto.

Você pode adicionar suporte para importar extensões WSDL implementando a interface System.ServiceModel.Description.IWsdlImportExtension e, em seguida, adicionando sua implementação à propriedade WsdlImporter.WsdlImportExtensions na sua instância System.ServiceModel.Description.WsdlImporter. O System.ServiceModel.Description.WsdlImporter também pode carregar implementações da interface registada no seu ficheiro de configuração da aplicação System.ServiceModel.Description.IWsdlImportExtension.

Note

Como o MetadataImporter construtor é interno, não se pode derivar de MetadataImporter nesta versão.

Propriedades

Name Description
Errors

Recebe um valor que indica se houve erros na importação dos metadados.

KnownContracts

Obtém um dicionário de contratos por nome que o importador conhece.

PolicyImportExtensions

Recebe um conjunto de importadores de apólice que o importador chama para processar as declarações de política.

State

Obtém ou define uma coleção de objetos usados na importação de metadados.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
ImportAllContracts()

Quando sobreposto numa classe derivada, devolve uma coleção de contratos importados dos metadados.

ImportAllEndpoints()

Quando sobrescrito numa classe derivada, devolve todos os endpoints nos metadados.

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a