2011-01-27 2 views
1

У меня есть настольное приложение, которое подключается к службе WCF и использует обнаружение WCF 4.0. Мой код, чтобы сделать сервис обнаруживаемые выглядит так:Как ограничить доступность службы WCF определенным адресам?

public static void MakeServiceHostDiscoverable(ServiceHost sh) 
    { 
     IServiceBehavior Beh = new ServiceDiscoveryBehavior(); 
     sh.Description.Behaviors.Add(Beh); 
     ServiceEndpoint Endp = new UdpDiscoveryEndpoint(); 
     sh.AddServiceEndpoint(Endp); 

    } 

Недавно приложение используется 2 различных ведомств в одной и той же компании. Каждый отдел имеет свой собственный сервер (ы), и клиенты в этом отделе должны только открывать сервер (ы) этого отдела. Сейчас клиенты могут видеть все серверы в сети компании.

Есть ли способ для обслуживания ограничить, с каких IP-адресов он может быть обнаружен? Или, еще лучше, может ли он динамически утверждать/отклонять запросы на обнаружение, когда они происходят?

ответ

0

Первоначальный аспект открытия WS-Discovery работает по принципу вещания - он не получает и не отвечает на запросы. В частности, цель метаданных заключается в том, чтобы помочь клиентам различать, на какие услуги он имеет право. Помимо этого, вы должны применить соответствующую безопасность для аутентификации и авторизации входящих запросов на уровне обслуживания. Наконец, если отделы находятся в отдельных подсетях, вы можете фильтровать широковещательные передачи UDP между подсетями, предполагая, что у вас есть соответствующая сетевая инфраструктура.

+0

Вот как я решил это. Каждый может обнаруживать службы, но экземпляры служб могут создаваться только клиентами, у которых есть разрешение. Я по-прежнему предпочел бы, чтобы службы оставались полностью невидимыми, но контроль доступа на уровне обслуживания пока достаточно хорош. – maxxxx