Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No Windows Communication Foundation (WCF), a importação de metadados é o processo de gerar uma representação abstrata de um serviço ou de suas partes componentes a partir de seus metadados. Por exemplo, o WCF (Windows Communication Foundation) pode importar instâncias de ServiceEndpoint, Binding ou ContractDescription de um documento WSDL para um serviço. Para importar metadados de serviço no WCF, use uma implementação da System.ServiceModel.Description.MetadataImporter classe abstrata. Os tipos que derivam da classe implementam suporte MetadataImporter para importar formatos de metadados que aproveitam a lógica de importação de WS-Policy no WCF.
Os 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 asserções de política personalizadas.
Esta seção descreve como importar extensões WSDL personalizadas e asserções de política. 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 suportados pelo 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. Asserções de política e extensões WSDL que os importadores padrão não reconhecem são passadas para importadores de políticas personalizadas e WSDL registrados para importação. Normalmente, os importadores são implementados para dar suporte a elementos de vinculação definidos pelo usuário ou para modificar o contrato importado.
Esta secção descreve:
Como implementar e usar a System.ServiceModel.Description.IWsdlImportExtension interface, que expõe os dados WSDL a 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.
Como implementar e usar a System.ServiceModel.Description.IPolicyImportExtension interface, que expõe asserções de política aos importadores antes da geração de objetos de descrição. Você pode usar essa interface para examinar ou modificar a vinculação ou o contrato com base nas políticas baixadas.
Para obter mais informações sobre como exportar WSDL personalizado e asserções de política, consulte Exportando metadados personalizados para uma extensão WCF.
Importando extensões WSDL personalizadas
Para adicionar suporte à importação de extensões WSDL, implemente a IWsdlImportExtension interface e adicione sua implementação à WsdlImportExtensions propriedade. O WsdlImporter também pode carregar implementações da interface registada no seu ficheiro de configuração da aplicação IWsdlImportExtension. 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 WsdlImporter, 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 o que o ImportContract método é chamado para permitir a modificação dos contratos importados dos metadados. Finalmente, o ImportEndpoint método é chamado para permitir a modificação dos pontos de extremidade importados.
Para obter mais informações, consulte Como importar WSDL personalizado.
Importando asserções de política personalizada
O tipo WsdlImporter e a ferramenta ServiceModel Metadata Utility Tool (Svcutil.exe) lidam automaticamente com o processamento de uma variedade de tipos de afirmações de política nas 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 asserções de política personalizadas, implemente a IPolicyImportExtension interface e, em seguida, adicione sua implementação à PolicyImportExtensions propriedade. O MetadataImporter também pode carregar implementações da interface registada no seu ficheiro de configuração da aplicação IPolicyImportExtension. Observe que vários importadores de apólices são registrados por padrão e a ordem dos importadores de apólices registrados é significativa.
O sistema de metadados chama repetidamente o método IPolicyImportExtension.ImportPolicy em todas as extensões de importação de políticas registadas para cada combinação de alternativas de políticas anexadas aos assuntos de política de mensagem, operação e ponto final. Ao importar uma porta WSDL, as políticas anexadas à porta e à associação WSDL correspondente são combinadas antes de chamar as extensões para importação de políticas. As alternativas políticas são disponibilizadas através de um PolicyConversionContext como PolicyAssertionCollection objeto. Cada PolicyAssertionCollection é uma coleção de declarações de política representadas por XmlElement objetos.
As propriedades Contract e BindingElements no objeto PolicyConversionContext expõem os objetos ContractDescription e BindingElement que foram importados do WSDL. As extensões de importação de política processam asserções de política localizando instâncias de um tipo específico de asserção de política, efetuando as alterações correspondentes nos objetos ContractDescription ou BindingElement e, em seguida, removendo as asserções de política da instância correspondente PolicyAssertionCollection.
Os atributos wsp:Optional e as expressões de políticas aninhadas não estão normalizadas, pelo que as extensões de importação de políticas devem lidar com estas construções de políticas. 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 impróprios podem ser passados ao importador. Certifique-se de que os importadores personalizados sejam robustos para todas as formas de XML.