Настройка WCF для использования одной из двух конечных точек
-
23-09-2019 - |
Вопрос
Как настроить WCF для использования только один из двух доступных конечных точек?
Мне нужны два TCP-порта (и, таким образом, используя netTcpBinding
).Хост службы должен сначала попытаться выполнить привязку к первому порту.Если это не удается, и только если это не удается, он должен попытаться привязаться ко второму порту.
Редактировать
Я знал, что это может быть достигнуто программно, но мое намерение сделать это декларативно (используя .config
только файлы).
Решение
Адрес конечной точки, включая номер порта, может быть задан в коде в любой момент процесса, прежде чем вы откроете соединение с помощью вашего прокси-объекта.Таким образом, вы можете установить адрес, а затем протестировать соединение, и если оно завершится неудачей, попробуйте другой порт.Вот некоторый код, который, надеюсь, иллюстрирует мою точку зрения.
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()
Другие советы
На стороне сервера нет проблем с предоставлением сервиса с двумя привязками.
Но на стороне клиента вы получите повторяющуюся ошибку контракта (или слова на этот счет)
Один из способов сделать это - создать два интерфейса (контракта), которые идентичны, за исключением имени.
У вас есть единственная копия реализации, каждая служба наследует от этой реализации.
Затем у вас есть две службы на разных портах, которые имеют одинаковую реализацию / функциональность.
Затем на клиенте вам нужно запрограммировать, что он сначала пытается подключиться к первому порту, а затем, если это не удается, он пытается подключиться ко второму.