Pergunta

Eu passei horas tentando fazer algumas personalizações na geração do WSDL, sem resultados. Eu fiquei preso principalmente porque não consegui encontrar uma amostra clara para o que eu quero fazer (eu posso ter perdido alguma coisa).

Vamos ao ponto: eu quero personalizar o WSDL gerado. Os artigos mais relevantes que encontrei são sobre adicionar atributos aos serviços existentes para adicionar comportamento, assim Artigo .

O que eu quero fazer é ser capaz de analisar o operationcontract e gerar e adicional xsd, se necessário.

minhas perguntas são:

  • Como você pode adicionar ou interceptar a geração WSDL existente sem adicionar atributos ?
  • Como configuro este componente no arquivo de configuração?

    Eu não quero mudar a maneira como os metadados são consumidos por svcutil.exe , basta adicionar algum complexpype 'on-the-fly' no WSDL gerado.

    Obrigado por suas sugestões!

Foi útil?

Solução

O que você precisa é implementar IWsdlExportExtension.ExportContract, mas a documentação afirma claramente:

O método ExportContract é chamado quando o sistema de exportação de metadados é exportar o contrato. Só contrato e implementação de comportamentos de operação IWsdlExportExtension obter o Chamada ExportContract. Todos os comportamentos implementação de IWsdlExportExtension get a chamada ExportEndpoint.

Para mim, isso significa que este método é chamado apenas quando implementado por contrato ou comportamento de operação que geralmente é definido por atributo personalizado, mas você também deve ser capaz de atribuir esses comportamentos na inicialização personalizada. Aqui está o exemplo da extensão WSDL para endpoint configurado a partir do arquivo de configuração (a configuração oferece apenas comportamentos para todo o serviço e endpoints). Eu acredito (mas não testei) que você pode fazer extensões semelhantes que consistirão em:

  • Comportamento de operação ou contrato implementar IWsdlExportExtension e ExportContract
  • Comportamento do endpoint que implementará IEndpointBehavior e ApplyDispatchBehavior. Em ApplyDispatchBehavior, você usará serviceEndpoint.Contract.Behaviors para adicionar o comportamento do contrato ou serviceEndpoint.Contract.Operations[x].Behaviors para adicionar o comportamento da operação.
  • Você criará BehaviorExtensionElement semelhante para definir o comportamento do seu novo endpoint a partir do arquivo de configuração.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top