Pergunta

Como configurar o WCF para usar apenas um de dois endpoints disponíveis?

Eu preciso de duas portas TCP (e, portanto, usando netTcpBinding).O host de serviço deve primeiro tentar vincular-se à primeira porta.Se falhar, e somente se falhar, ele deverá tentar vincular-se à segunda porta.

EDITAR

Eu sabia que isso pode ser obtido programaticamente, mas minha intenção é fazê-lo declarativamente (usando .config somente arquivos).

Foi útil?

Solução

O endereço do terminal, incluindo o número da porta, pode ser definido no código em qualquer ponto do processo antes de você abrir uma conexão usando seu objeto proxy.Assim você pode definir o endereço e depois testar a conexão e, se falhar, tente a outra porta.Aqui está um código que espero ilustrar meu ponto.

Dim oProxy as New YourWCFServiceType()

oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try first"))

Dim FirstBindingSucceeded as Boolean
Try
    oProxy.Open()
    FirstBindingSucceeded = True
Catch
End Try

If FirstBindingSucceeded = False Then
    oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try second"))
End If

oProxy.Open()

Outras dicas

No lado do servidor, não há problema em expor um serviço com duas ligações.

Mas, no lado do cliente, você receberá um erro de contrato duplicado (ou palavras nesse sentido)

Uma maneira de fazer isso é criar duas interfaces (contratos) que são idênticas, exceto pelo nome.

Você tem uma única cópia da implementação, cada serviço herda desta implementação.

Você tem dois serviços em portas diferentes, que têm a mesma implementação / funcionalidade.

No cliente, você precisa programar que primeiro tenta a primeira porta e, se isso falhar, ele tentará o segundo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top