WsdlImporter Classe

Definição

Importa metadados da Web Services Description Language (WSDL) 1.1 com WS-Policy anexos.

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
WsdlImporter

Exemplos

O exemplo de código seguinte mostra como usar o WsdlImporter para adicionar um personalizado System.Runtime.Serialization.IDataContractSurrogate, importar todos os contratos, compilar esses contratos e guardá-los num ficheiro.

  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 a WsdlImporter classe para importar metadados, bem como converter essa informação em várias classes que representem informações de contratos e endpoints.

A classe base para WsdlImporter, a MetadataImporter classe, define métodos que importam seletivamente informações e propriedades de contratos e endpoints 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 utiliza os importadores de políticas personalizadas (IPolicyImportExtension implementações) do seu tipo-pai para tratar declarações de política personalizadas e os seus próprios importadores WSDL personalizados (IWsdlImportExtension implementações) para tratar dos elementos WSDL personalizados. Para mais detalhes, veja Extensão do Sistema de Metadados.

Ao importar política a partir de documentos WSDL, o WsdlImporter tipo tentará até 32 combinações de alternativas de política associadas aos diferentes temas da política WSDL. Se nenhuma combinação importar de forma limpa, a primeira combinação será usada para construir uma ligação personalizada parcial.

Para além destes métodos e propriedades, WsdlImporter implementa também métodos que suportam a importação de informação de ligação e propriedades que dão acesso a quaisquer documentos de política, documentos WSDL, extensões WSDL e documentos de esquema XML. Para informações sobre como estender WsdlImporter para suportar elementos WSDL personalizados, veja IWsdlImportExtension.

Normalmente, a WsdlImporter classe é utilizada num processo de três etapas.

  1. Crie um WsdlImporter objeto e passe um MetadataSet objeto ao construtor.

  2. Chame o método adequado Import para obter os resultados.

  3. Verifique a Errors propriedade para ver se há erros de importação.

Note

Ao importar tipos de porta WSDL, se o QName do tipo de porta corresponder a uma entrada no KnownContracts dicionário, então o tipo de porta não é importado e o contrato conhecido é usado em vez disso.

Nenhum valor é devolvido das WsdlImporter propriedades até que um dos métodos de importação seja chamado. Os objetos personalizados System.ServiceModel.Description.IWsdlImportExtension podem ser carregados WsdlImporter programaticamente ou usando o elemento de configuração <do cliente wsdlImporters> .

Metadados importados como endpoints de serviço não podem ser usados para criar um runtime ou exportar metadados porque os endpoints importados não contêm informação de tipo gerido. Para usar os metadados para criar um cliente ou runtime de serviço ou para gerar metadados, deve primeiro gerar e compilar código a partir dos metadados e usar essa informação de tipo para criar um novo System.ServiceModel.Description.ContractDescription objeto usando GetContract.

Construtores

Name Description
WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>, MetadataImporterQuotas)

Cria um WsdlImporter objeto a partir dos metadados especificados, importadores de políticas personalizadas e importadores WSDL personalizados.

WsdlImporter(MetadataSet, IEnumerable<IPolicyImportExtension>, IEnumerable<IWsdlImportExtension>)

Cria um WsdlImporter objeto a partir dos metadados especificados, importadores de políticas personalizadas e importadores WSDL personalizados.

WsdlImporter(MetadataSet)

Inicializa uma nova instância da WsdlImporter classe.

Propriedades

Name Description
Errors

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

(Herdado de MetadataImporter)
KnownContracts

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

(Herdado de MetadataImporter)
PolicyImportExtensions

Recebe um conjunto de importadores de apólice que o importador chama para processar as 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 ServiceDescription objetos que descrevem a informação contratual nos documentos de metadados.

WsdlImportExtensions

Obtém um conjunto de IWsdlImportExtension objetos usados para importar informação WSDL personalizada.

XmlSchemas

Obtém um conjunto de XmlSchema objetos que descrevem tipos nos 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)
ImportAllBindings()

Devolve um conjunto de Binding objetos importados dos documentos de metadados.

ImportAllContracts()

Devolve um conjunto de ContractDescription objetos que representam informação sobre o tipo de porta nos documentos de metadados.

ImportAllEndpoints()

Devolve a ServiceEndpointCollection que representa os pontos finais nos documentos WSDL.

ImportBinding(Binding)

Devolve um Binding objeto que representa informação de ligação de um conjunto de documentos de metadados.

ImportContract(PortType)

Devolve um ContractDescription objeto que representa metadados localizados pela informação do tipo de porta especificada.

ImportEndpoint(Port)

Devolve a ServiceEndpoint de um conjunto de documentos de metadados que utiliza informação do objeto especificado Port .

ImportEndpoints(Binding)

Retorna a ServiceEndpointCollection que representa todos os tipos de porta WSDL usando o especificado Binding.

ImportEndpoints(PortType)

Devolve a ServiceEndpointCollection que representa todos os tipos de portas WSDL associadas ao especificado PortType.

ImportEndpoints(Service)

Devolve a ServiceEndpointCollection que representa todos os tipos de portas WSDL dentro do especificado Service.

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