2011-01-27 2 views
1

J'ai une application de bureau qui se connecte à un service WCF et utilise la découverte WCF 4.0. Mon code pour rendre le service ressemble découvrables comme ceci:Comment limiter la visibilité d'un service WCF à certaines adresses?

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

    } 

Récemment, l'application est utilisé par 2 différents départements dans la même entreprise. Chaque département a son propre serveur et les clients de ce département doivent seulement découvrir le (s) serveur (s) de ce département. À l'heure actuelle, les clients peuvent voir tous les serveurs du réseau de l'entreprise.

Existe-t-il un moyen pour le service de limiter à partir de quelles adresses IP il peut être découvert? Ou, mieux encore, peut-il approuver/rejeter de manière dynamique les demandes de découverte à mesure qu'elles surviennent?

Répondre

0

L'aspect découverte initiale de WS-Discovery fonctionne selon un principe de diffusion: il ne reçoit et ne répond pas aux demandes. En partie, le but des métadonnées est d'aider les clients à distinguer les services auxquels ils sont admissibles. Au-delà de cela, vous devez appliquer une sécurité appropriée pour authentifier et autoriser les demandes entrantes au niveau du service. Enfin, si les départements sont sur des sous-réseaux distincts, vous pouvez filtrer les diffusions UDP entre les sous-réseaux, en supposant que vous disposez d'une infrastructure réseau appropriée.

+0

Voilà comment je l'ai résolu. Tout le monde peut découvrir des services, mais les instances des services ne peuvent être créées que par des clients qui ont la permission. Je préférerais toujours que les services restent complètement invisibles mais le contrôle de l'accès au niveau du service est suffisant pour l'instant. – maxxxx

Questions connexes