Compartilhar via


Exportando e importando metadados

No WCF (Windows Communication Foundation), a exportação de metadados é o processo de descrever pontos de extremidade de serviço e projetá-los em uma representação paralela e padronizada que os clientes podem usar para entender como usar o serviço. A importação de metadados de serviço é o processo de geração de instâncias ServiceEndpoint ou partes de metadados de serviço.

Exportação de metadados

Para exportar metadados de instâncias System.ServiceModel.Description.ServiceEndpoint, use uma implementação da classe abstrata MetadataExporter. O tipo WsdlExporter é a implementação da classe abstrata MetadataExporter incluída no WCF.

O tipo System.ServiceModel.Description.WsdlExporter gera metadados de linguagem WSDL com expressões de política anexadas encapsuladas em uma instância MetadataSet. Você pode usar uma instância System.ServiceModel.Description.WsdlExporter para exportar iterativamente metadados para objetos ContractDescription e ServiceEndpoint. Você também pode exportar uma coleção de objetos ServiceEndpoint e associá-los a um nome de serviço específico.

Observação

Você só pode usar o WsdlExporter para exportar metadados de instâncias ContractDescription que contêm informações de tipo CLR (Common Language Runtime), como uma instância ContractDescription criada usando o método ContractDescription.GetContract ou criada como parte do ServiceDescription para uma instância ServiceHost. Você não pode usar o WsdlExporter para exportar metadados de instâncias ContractDescription importadas de metadados de serviço ou construídas sem informações de tipo.

Importação de metadados

Importação de documentos de WSDL

Para importar metadados de serviço no WCF, use uma implementação da classe abstrata MetadataImporter. O tipo System.ServiceModel.Description.WsdlImporter é a implementação da classe abstrata MetadataImporter incluída no WCF. O tipo WsdlImporter importa metadados WSDL com políticas anexadas empacotadas em um objeto MetadataSet.

O tipo WsdlImporter fornece controle sobre como importar os metadados. Você pode importar todos os pontos de extremidade, todas as associações ou todos os contratos. Você pode importar todos os pontos de extremidade associados a um serviço, uma associação ou um tipo de porta de WSDL específico. Você também pode importar o ponto de extremidade para uma porta de WSDL específica, a associação para uma associação de WSDL específica ou o contrato para um tipo de porta de WSDL específico.

O WsdlImporter também expõe uma propriedade KnownContracts que permite que você especifique um conjunto de contratos que não precisam ser importados. O WsdlImporter usa os contratos na propriedade KnownContracts, em vez de importar um contrato com o mesmo nome qualificado dos metadados.

Importação de Políticas

O tipo WsdlImporter coleta as expressões de política anexadas aos assuntos de política de mensagem, operação e ponto de extremidade e usa as implementações IPolicyImportExtension na coleção PolicyImportExtensions para importar as expressões de política.

A lógica de importação de política lida automaticamente com as referências de política a expressões de política no mesmo documento de WSDL e é identificada com um atributo wsu:Id ou xml:id. A lógica de importação de política protege os aplicativos contra referências de política circular, limitando o tamanho de uma expressão de política a 4096 nós, onde um nó é um dos seguintes elementos: wsp:Policy, wsp:All, wsp:ExactlyOne, wsp:policyReference.

A lógica de importação de política também normaliza automaticamente as expressões de política. As expressões de política aninhada e o atributo wsp:Optional não são normalizados. A quantidade de processamento de normalização feita é limitada a 4.096 etapas, onde cada etapa produz uma declaração de política ou um elemento filho de um elemento wsp:ExactlyOne.

O tipo WsdlImporter tenta usar até 32 combinações de alternativas de política anexadas aos diferentes assuntos de política de WSDL. Se nenhuma combinação for importada de forma limpa, a primeira combinação será usada para construir uma associação personalizada parcial.

Tratamento de erros

Os tipos MetadataExporter e MetadataImporter expõem uma propriedade Errors que pode conter uma coleção de mensagens de erro e aviso, encontradas durante os processos de exportação e importação, respectivamente, que podem ser usadas ao implementar ferramentas.

O tipo WsdlImporter geralmente gera uma exceção para uma exceção capturada durante o processo de importação e adiciona um erro correspondente à propriedade Errors. No entanto, os métodos ImportAllContracts, ImportAllBindings, ImportAllEndpoints e ImportEndpoints não geram essas exceções. Portanto, você deve verificar a propriedade Errors para determinar se ocorreu algum problema ao chamar esses métodos.

O tipo WsdlExporter gera novamente todas as exceções capturadas durante o processo de exportação. Essas exceções não são capturadas como erros na propriedade Errors. Depois que o WsdlExporter gera uma exceção, ele fica em um estado com falha e não pode ser reutilizado. O WsdlExporter adiciona avisos à propriedade Errors, quando uma operação não pode ser exportada porque usa ações curinga e quando nomes de associação duplicados são encontrados.

Nesta seção

Como: importar metadados para pontos de extremidade de serviço
Descreve como importar os metadados baixados para os objetos de descrição.

Como: exportar metadados para pontos de extremidade de serviço
Descreve como exportar os objetos de descrição para os metadados.

ServiceDescription and WSDL Reference
Descreve o mapeamento entre os objetos de descrição e a linguagem WSDL.

Como: usar Svcutil.exe para exportar metadados de código de serviço compilado
Descreve o uso de Svcutil.exe para exportar os metadados para serviços, contratos e tipos de dados nos assemblies compilados.

Referência de esquema de contrato de dados
Descreve o subconjunto do Esquema XML usado por DataContractSerializer para descrever os tipos CLR (Common Language Runtime) para serialização XML.

Referência

WsdlExporter

WsdlImporter

Confira também