Настройка WCF для использования одной из двух конечных точек

StackOverflow https://stackoverflow.com/questions/2148786

Вопрос

Как настроить 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()

Другие советы

На стороне сервера нет проблем с предоставлением сервиса с двумя привязками.

Но на стороне клиента вы получите повторяющуюся ошибку контракта (или слова на этот счет)

Один из способов сделать это - создать два интерфейса (контракта), которые идентичны, за исключением имени.

У вас есть единственная копия реализации, каждая служба наследует от этой реализации.

Затем у вас есть две службы на разных портах, которые имеют одинаковую реализацию / функциональность.

Затем на клиенте вам нужно запрограммировать, что он сначала пытается подключиться к первому порту, а затем, если это не удается, он пытается подключиться ко второму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top