MetadataImporter Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Importa os metadados em objetos ServiceEndpoint.
public ref class MetadataImporter abstract
public abstract class MetadataImporter
type MetadataImporter = class
Public MustInherit Class MetadataImporter
- Herança
-
MetadataImporter
- Derivado
Exemplos
O exemplo a seguir mostra o uso da System.ServiceModel.Description.WsdlImporter classe derivada para importar metadados usando o estado personalizado, verificando a Errors propriedade, compilando metadados importados para tipos gerenciados e salvando o resultado em um arquivo 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();
}
Comentários
Use uma implementação da MetadataImporter classe abstrata para importar metadados de serviço. Os tipos que derivam da classe implementam suporte MetadataImporter para importar formatos de metadados que aproveitam a lógica de importação WS-Policy no WCF (Windows Communication Foundation).
Uma MetadataImporter implementação coleta as expressões de política anexadas aos metadados de serviço em um System.ServiceModel.Description.PolicyConversionContext objeto. Em MetadataImporter seguida, processa as políticas como parte da importação dos metadados chamando as implementações da System.ServiceModel.Description.IPolicyImportExtension interface na MetadataImporter.PolicyImportExtensions propriedade.
Você pode adicionar suporte para importar novas declarações de política a um MetadataImporter adicionando sua própria implementação da System.ServiceModel.Description.IPolicyImportExtension interface à MetadataImporter.PolicyImportExtensions propriedade em uma MetadataImporter instância. Como alternativa, você pode registrar sua extensão de importação de política no arquivo de configuração do aplicativo.
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 System.ServiceModel.Description.IWsdlImportExtension interface e adicionando sua implementação à WsdlImporter.WsdlImportExtensions propriedade em sua System.ServiceModel.Description.WsdlImporter instância. Também System.ServiceModel.Description.WsdlImporter é possível carregar implementações da System.ServiceModel.Description.IWsdlImportExtension interface registrada no arquivo de configuração do aplicativo.
Observação
Como o MetadataImporter construtor é interno, você não pode derivar MetadataImporter nesta versão.
Propriedades
Errors |
Obtém um valor que indica se houve erros ao importar os metadados. |
KnownContracts |
Obtém um dicionário de contratos pelo nome que o importador conhece. |
PolicyImportExtensions |
Obtém uma coleção de importadores de políticas que o importador chama para processar declarações de política. |
State |
Obtém ou define uma coleção de objetos usados na importação de metadados. |
Métodos
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
ImportAllContracts() |
Quando substituído em uma classe derivada, retorna uma coleção de contratos importados dos metadados. |
ImportAllEndpoints() |
Quando substituído em uma classe derivada, retorna todos os pontos de extremidade nos metadados. |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |