WsdlImporter 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 metadados da linguagem WSDL 1.1 com anexos WS-Policy.
public ref class WsdlImporter : System::ServiceModel::Description::MetadataImporter
public class WsdlImporter : System.ServiceModel.Description.MetadataImporter
type WsdlImporter = class
inherit MetadataImporter
Public Class WsdlImporter
Inherits MetadataImporter
- Herança
Exemplos
O exemplo de código a seguir mostra como usar para WsdlImporter adicionar um personalizado System.Runtime.Serialization.IDataContractSurrogate, importar todos os contratos e compilar esses contratos e salvá-los em um arquivo.
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 a WsdlImporter classe para importar metadados, bem como converter essas informações em várias classes que representam informações de contrato e ponto de extremidade.
A classe base para WsdlImporter, a MetadataImporter classe, define métodos que importam seletivamente informações de contrato e ponto de extremidade e propriedades que expõem quaisquer erros de importação e aceitam informações de tipo relevantes para o processo de importação e conversão. O WsdlImporter tipo usa os importadores de política personalizada (IPolicyImportExtension implementações) de seu tipo pai para lidar com instruções de política personalizadas e seus próprios importadores WSDL personalizados (IWsdlImportExtension implementações) para lidar com elementos WSDL personalizados. Para obter detalhes, consulte Estender o sistema de metadados.
Ao importar a política de documentos WSDL, o WsdlImporter tipo experimentará até 32 combinações de alternativas de política anexadas aos diferentes assuntos de política do WSDL. Se nenhuma combinação for importada de forma limpa, a primeira combinação será usada para construir uma associação personalizada parcial.
Além desses métodos e propriedades, WsdlImporter também implementa métodos que dão suporte à importação de informações de associação e propriedades que fornecem acesso a quaisquer documentos de política, documentos WSDL, extensões WSDL e documentos de esquema XML. Para obter informações sobre como estender WsdlImporter para dar suporte a elementos WSDL personalizados, consulte IWsdlImportExtension.
Normalmente, a WsdlImporter classe é usada em um processo de três etapas.
Crie um WsdlImporter objeto e passe um MetadataSet objeto para o construtor.
Chame o método apropriado
Import
para recuperar os resultados.Verifique a Errors propriedade para determinar se há erros de importação.
Observação
Ao importar tipos de porta WSDL, se o QName do tipo de porta corresponder a KnownContracts uma entrada no dicionário, o tipo de porta não será importado e o contrato conhecido será usado.
Nenhum valor é retornado das WsdlImporter propriedades até que um dos métodos de importação seja chamado. Objetos personalizados System.ServiceModel.Description.IWsdlImportExtension podem ser carregados programaticamente WsdlImporter ou usando o elemento wsdlImporters> da configuração< do cliente.
Metadados importados como pontos de extremidade de serviço não podem ser usados para criar um runtime ou exportar metadados porque os pontos de extremidade importados não contêm informações de tipo gerenciado. Para usar os metadados para criar um runtime de cliente ou serviço ou para gerar metadados, primeiro você deve gerar e compilar o código dos metadados e usar essas informações de tipo para criar um novo System.ServiceModel.Description.ContractDescription objeto usando GetContract.
Construtores
WsdlImporter(MetadataSet) |
Inicializa uma nova instância da classe WsdlImporter. |
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>) |
Cria um objeto WsdlImporter dos metadados especificados, dos importadores de políticas personalizados e dos importadores de WSDL personalizados. |
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>, MetadataImporterQuotas) |
Cria um objeto WsdlImporter dos metadados especificados, dos importadores de políticas personalizados e dos importadores de WSDL personalizados. |
Propriedades
Errors |
Obtém um valor que indica se houve erros ao importar os metadados. (Herdado de MetadataImporter) |
KnownContracts |
Obtém um dicionário de contratos pelo nome que o importador conhece. (Herdado de MetadataImporter) |
PolicyImportExtensions |
Obtém uma coleção de importadores de políticas que o importador chama para processar declarações de política. (Herdado de MetadataImporter) |
State |
Obtém ou define uma coleção de objetos usados na importação de metadados. (Herdado de MetadataImporter) |
WsdlDocuments |
Obtém um conjunto de objetos ServiceDescription que descrevem as informações de contrato nos documentos de metadados. |
WsdlImportExtensions |
Obtém um conjunto de objetos IWsdlImportExtension usados para importar informações de WSDL personalizado. |
XmlSchemas |
Obtém um conjunto de objetos XmlSchema que descrevem os tipos nos 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) |
ImportAllBindings() |
Retorna um conjunto de objetos Binding importados dos documentos de metadados. |
ImportAllContracts() |
Retorna um conjunto de objetos ContractDescription que representam informações de tipo de porta nos documentos de metadados. |
ImportAllEndpoints() |
Retorna um ServiceEndpointCollection que representa os pontos de extremidade em documentos WSDL. |
ImportBinding(Binding) |
Retorna um objeto Binding que representa as informações de associação de um conjunto de documentos de metadados. |
ImportContract(PortType) |
Retorna um objeto ContractDescription que representa metadados localizados segundo as informações de tipo de porta especificadas. |
ImportEndpoint(Port) |
Retorna um ServiceEndpoint de um conjunto de documentos de metadados que usa as informações do objeto Port especificado. |
ImportEndpoints(Binding) |
Retorna um ServiceEndpointCollection que representa todos os tipos de porta WSDL que usam a Binding especificada. |
ImportEndpoints(PortType) |
Retorna uma ServiceEndpointCollection que representa todos os tipos de porta WSDL associados ao PortType. |
ImportEndpoints(Service) |
Retorna uma ServiceEndpointCollection que representa todos os tipos de porta WSDL no Service especificado. |
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) |