Pergunta

Existe uma maneira de obter um contrato de um serviço em execução programaticamente? Quero comparar o contrato de um serviço em execução de um contrato referenciado no lado do cliente.

Por exemplo, tenho duas instâncias de serviço1 em execução em diferentes máquinas que possuem implementações diferentes. Ambos têm um contrato chamado iservice1, mas implementação diferente. Eu tenho um console1 que tem uma referência ao iService1 (primeira instância). O Console1 possui uma coleção de 2 endereços de extremidade. O Console1 deseja verificar qual dos serviços em execução é o serviço correto para o contrato (primeira instância) que ele está usando.

O que eu quero fazer aqui é obter o contrato programaticamente do serviço usando o endereço e compará -lo com o contrato referenciado que eu tenho.

Foi útil?

Solução

Se o serviço expõe metadados, é possível sim. Exatamente como depende da ligação usada, se for uma ligação normal de HTTP, você pode usar http: //myserver/myservie.svc? wsdl. Para comparar os contratos, você precisaria baixar o WSDL usando uma API HTTP normal e compará -la com um WSDL de referência armazenado.

Também há algumas coisas que você deve levar em consideração antes de implementar uma comparação:

  • Se os contratos não corresponderem, o WCF lançará erros.
  • Um certo contrato, publicado em um determinado nome de nome, não deve existir em versões diferentes. Isso é mais uma questão de rotina do que uma questão técnica. Em casos como o seu, onde o mesmo contrato é implementado por diferentes serviços, é necessária uma boa rotina para alterações no contrato.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top