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