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.