Exportando metadados personalizados para uma extensão do WCF
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. Metadados personalizados consistem em elementos XML que os exportadores de metadados fornecidos pelo sistema não podem exportar. Normalmente, isso inclui elementos WSDL personalizados para comportamentos definidos pelo usuário e elementos de associação e declarações de políticas sobre os recursos e requisitos de associações e contratos.
Esta seção descreve a exportação de declarações personalizadas de WSDL ou declarações de política e não se concentra no processo de exportaçã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 construídos pelo sistema, consulte Exportar e importar metadados.
Visão geral
Quando os metadados são publicados usando o System.ServiceModel.Description.ServiceMetadataBehavior, o System.ServiceModel.Description.ServiceDescription é examinado e XSD e WSDL, incluindo as declarações de política - são gerados para todos os contratos e associações que o WCF pode dar suporte usando atributos e associações fornecidos pelo sistema. No entanto, atributos de comportamento personalizado ou elementos de associação exigem suporte antes que possam ser exportados corretamente.
Esta seção descreve:
Como implementar e usar a interface System.ServiceModel.Description.IWsdlExportExtension, que expõe os dados de geração do WSDL antes de você publicar o WSDL.
Como implementar e usar a interface System.ServiceModel.Description.IPolicyExportExtension, que expõe os dados de política para você antes de exportar as declarações de política em dados WSDL.
Para obter mais informações sobre como importar declarações de política e WSDL personalizadas, consulte Importar metadados personalizados para uma extensão WCF.
Exportando elementos WSDL personalizados
Implemente o IWsdlExportExtension em uma operação de comportamento, o comportamento do contrato, o comportamento do ponto de extremidade ou o elemento de associação (IOperationBehavior, IContractBehavior, IEndpointBehaviorou System.ServiceModel.Channels.BindingElement, respectivamente) e insira os comportamentos ou elementos de associação na descrição do serviço que está tentando exportar. (Para obter mais informações sobre como inserir comportamentos, consulte Configurar e estender o runtime com comportamentos). O IWsdlExportExtension é chamado para cada ponto de extremidade e cada ponto de extremidade exporta o contrato primeiro se ele ainda não tiver sido exportado. Você pode participar de qualquer processo de exportação, dependendo de suas necessidades:
Use o WsdlContractConversionContext para modificar os metadados exportados no método ExportContract.
Use o WsdlEndpointConversionContext para modificar os metadados exportados para o ponto de extremidade no método ExportEndpoint.
O método ExportContract é chamado em todas as implementações de IWsdlExportExtension dentro da instância System.ServiceModel.Description.ContractDescription que está sendo exportada. O método ExportEndpoint é chamado em todas as implementações de IWsdlExportExtension com a instância System.ServiceModel.Description.ServiceEndpoint que está sendo exportada.
Para obter mais informações, consulte Como exportar o WSDL personalizado e a amostra de Publicação WSDL personalizada.
Exportar declarações de política personalizadas
Implemente o IPolicyExportExtension em um BindingElement e adicione o elemento de associação à associação para gravar declarações de política personalizadas sobre recursos de contrato e suporte de associação no WSDL. O IPolicyExportExtension é chamado uma vez ao exportar o elemento de associação implementado em uma associação e passa o PolicyConversionContext para o método ExportPolicy. Você pode usar os métodos na instância PolicyConversionContext para adicionar às declarações de política anexadas à associação WSDL nas entidades de mensagem, operação ou ponto de extremidade.
Para obter mais informações, consulte Como exportar declarações de política personalizadas.