Compartilhar via


Importando metadados personalizados para uma extensão WCF

No WCF (Windows Communication Foundation), a importação de metadados é o processo de geração de uma representação abstrata de um serviço ou de suas partes componentes de seus metadados. Por exemplo, para um serviço, o WCF pode importar instâncias ServiceEndpoint, Binding ou ContractDescription de um documento WSDL. Para importar metadados de serviço no WCF, use uma implementação da System.ServiceModel.Description.MetadataImporter classe abstrata. Tipos que derivam da classe MetadataImporter implementam suporte para a importação de formatos de metadados que aproveitam a lógica de importação WS-Policy no WCF.

Metadados personalizados consistem em elementos XML que os importadores de metadados fornecidos pelo sistema não podem importar. Normalmente, isso inclui extensões WSDL personalizadas e declarações de política personalizadas.

Esta seção descreve como importar extensões WSDL personalizadas e declarações de política. Ele não se concentra no processo de importação em si. Para obter mais informações sobre como usar os tipos que exportam e importam metadados, independentemente de os metadados serem personalizados ou compatíveis com o sistema, consulte Exportando e importando metadados.

Visão geral

O System.ServiceModel.Description.WsdlImporter tipo é a implementação da MetadataImporter classe abstrata incluída no WCF. O WsdlImporter tipo importa metadados WSDL com políticas anexadas que são agrupadas em um System.ServiceModel.Description.MetadataSet objeto. Declarações de política e extensões WSDL que os importadores padrão não reconhecem são passadas para qualquer política personalizada registrada e importadores WSDL para importação. Normalmente, os importadores são implementados para dar suporte a elementos de associação definidos pelo usuário ou modificar o contrato importado.

Esta seção descreve:

  1. Como implementar e usar a System.ServiceModel.Description.IWsdlImportExtension interface, que expõe os dados do WSDL para importadores personalizados antes da geração de descrições e da geração de código. Você pode usar essa interface para examinar ou modificar os tipos de descrição e a compilação de código executada usando um determinado conjunto de metadados.

  2. Como implementar e usar a System.ServiceModel.Description.IPolicyImportExtension interface, que expõe declarações de política a importadores antes da geração de objetos de descrição. Você pode usar esta interface para examinar ou modificar a vinculação ou o contrato com base em políticas baixadas.

Para obter mais informações sobre como exportar declarações de política e WSDL personalizadas, consulte Exportando metadados personalizados para uma extensão do WCF.

Importando extensões WSDL personalizadas

Para adicionar suporte para importar extensões WSDL, implemente a IWsdlImportExtension interface e adicione sua implementação à WsdlImportExtensions propriedade. WsdlImporter pode também carregar implementações da interface IWsdlImportExtension registrada no arquivo de configuração do aplicativo. Observe que vários importadores WSDL são registrados por padrão e a ordem dos importadores WSDL registrados é significativa.

Quando o importador WSDL personalizado é carregado e usado pelo WsdlImportermétodo, primeiro o BeforeImport método é chamado para habilitar a modificação de metadados antes do processo de importação. Em seguida, os contratos são importados após os quais o ImportContract método é chamado para habilitar a modificação dos contratos importados dos metadados. Por fim, o ImportEndpoint método é chamado para habilitar a modificação dos pontos de extremidade importados.

Para obter mais informações, consulte Como importar WSDL personalizado.

Importando declarações de política personalizada

O tipo WsdlImporter e a Ferramenta de Utilitário de Metadados ServiceModel (Svcutil.exe) manipulam automaticamente o processamento de uma variedade de tipos de assertivas de política em expressões de política anexadas a documentos WSDL. Essas ferramentas coletam, normalizam e mesclam expressões de política anexadas a associações WSDL e portas WSDL.

Para adicionar suporte para importar declarações de política personalizadas, implemente a IPolicyImportExtension interface e adicione sua implementação à PolicyImportExtensions propriedade. MetadataImporter pode também carregar implementações da interface IPolicyImportExtension registrada no arquivo de configuração do aplicativo. Note que vários importadores de políticas são registrados por padrão e a ordem dos importadores de políticas registrados é significativa.

O sistema de metadados chama repetidamente o método IPolicyImportExtension.ImportPolicy em todas as extensões de importação de política registradas para cada combinação de alternativas de política anexadas às mensagens, operações e questões de ponto de extremidade. Ao importar uma porta WSDL, as políticas anexadas à porta e à associação WSDL correspondente são mescladas antes de chamar as extensões de importação de política. As alternativas de política estão disponíveis por meio de objetos PolicyConversionContext como PolicyAssertionCollection. Cada PolicyAssertionCollection é uma coleção de afirmações de política representadas por objetos XmlElement.

As propriedades Contract e BindingElements no objeto PolicyConversionContext expõem os objetos ContractDescription e BindingElement que foram importados do WSDL. Extensões de importação de políticas processam declarações de política localizando instâncias de um tipo específico de declaração de política, fazendo alterações correspondentes nos objetos ContractDescription ou BindingElement e, em seguida, removendo as declarações de política da instância correspondente PolicyAssertionCollection.

O wsp:Optional atributo e as expressões de política aninhadas não são normalizados, portanto, as extensões de importação de política devem lidar com esses constructos de política. Além disso, as extensões de importação de política podem ser chamadas várias vezes com os mesmos ContractDescription objetos e BindingElement , portanto, as extensões de importação de política devem ser robustas para esse comportamento.

Importante

Metadados inválidos ou inadequados podem ser passados para o importador. Verifique se os importadores personalizados são robustos para todas as formas de XML.

Consulte também