MetadataImporter Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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) |