Настройка WCF для использования одной из двух конечных точек - PullRequest
0 голосов
/ 27 января 2010

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

Мне нужно два порта TCP (и, следовательно, используя netTcpBinding). Хост службы должен сначала попытаться подключиться к первому порту. В случае сбоя, и только в случае сбоя, он должен попытаться подключиться ко второму порту.

EDIT

Я знал, что это может быть достигнуто программно, но я намерен сделать это декларативно (используя только .config файлы).

Ответы [ 2 ]

2 голосов
/ 28 января 2010

Адрес конечной точки, включая номер порта, может быть задан в коде в любой точке процесса перед открытием соединения с использованием прокси-объекта. Таким образом, вы можете установить адрес, а затем проверить соединение, а в случае сбоя попробуйте другой порт. Вот код, который, я надеюсь, иллюстрирует мою точку зрения.

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()
1 голос
/ 27 января 2010

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

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

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

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

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

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

...