Configurando o WCF para usar um dos dois endpoints
-
23-09-2019 - |
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).
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.