WCF UDP обнаружение в другой сети

У нас есть две разные сети в нашей компании, 17 и 18

  • 170.17.xxx.xxx
  • 170.18.xxx.xxx

В сети 17 запущена служба WCF, которую можно обнаружить. Это настраивается с помощью следующего кода:

host.AddDefaultEndpoints();
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());

EndpointDiscoveryBehavior behavior = new EndpointDiscoveryBehavior();
behavior.Scopes.Add(scope);

foreach(ServiceEndpoint endpoint in host.Description.Endpoints)
{
    if(endpoint.IsSystemEndpoint || endpoint is DiscoveryEndpoint    || 
       endpoint is AnnouncementEndpoint || endpoint is ServiceMetadataEndpoint)
        continue;

    endpoint.Behaviors.Add(behavior);
}

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

Клиенты обнаруживают службу, создавая DiscoveryClient с UdpDiscoveryEndpoint по умолчанию.

DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

FindCriteria criteria = new FindCriteria(typeof(T));
criteria.Scopes.Add(scope);

FindResponse discovered = discoveryClient.Find(criteria);
discoveryClient.Close();

Это прекрасно работает, когда клиент и служба работают в одной сети. Но я хотел бы иметь клиента, работающего в сети 18, который может найти службу в сети 17.

Так возможно ли обнаруживать службы в других сетях с помощью DiscoveryClient и UdpDiscoveryEndpoint?

редактировать

Или это может быть проблема с брандмауэром?

1 ответ

Решение

Это не проблема брандмауэра, а нормальное поведение WS-Discovery. WS-Discovery использует SOAP-over-UDP, отправленный в IP-группу многоадресной рассылки (239.255.255.250). А многоадресные пакеты, как правило, не маршрутизируются и остаются в пределах локальной сети. Таким образом, DiscoveryClient не может обнаружить сервисы в другой сети без внешней помощи.

У вас есть два варианта:

  1. Настройте маршрутизаторы для передачи многоадресного IP-трафика между собой. Хотя это довольно легко сделать, это может загрузить вашу межсетевую связь без необходимости, а также может потребоваться помощь от вашего интернет-провайдера, или вам может потребоваться туннелирование какого-либо рода.
  2. Установите так называемый "прокси-сервер обнаружения" в сети, где находятся обнаруживаемые службы. Discovery Proxy в основном выполняет обнаружение локально, а затем использует HTTP для доставки результатов обнаружения в другие сети. Поскольку Discovery Proxy имеет тот же SOAP WSDL, существующие клиенты WS-Discovery могут использовать его без каких-либо изменений через Интернет.
Другие вопросы по тегам