2009-12-04 5 views
1

J'ai un service wcf dans C# (comme le calculateur des exemples msdn), et je me demandais s'il était possible de le limiter pour ne servir que 1 client par IP? Je veux la possibilité de connecter quelques IP à la fois (au moins 5-6 sessions actives), et cela fonctionne pour l'instant, mais je ne veux pas plus d'une connexion par IP unique (ou un ordinateur unique)Comment limiter une application de service WCF, afin que seuls les clients uniques puissent accéder

+0

À moins que votre service soit pour un intranet, l'adresse IP n'est pas unique par ordinateur. –

+0

je sais, ce que je veux, c'est que quelqu'un est déjà connecté au service, qu'il ne peut pas se connecter à nouveau par le biais de la même ip – avance70

+0

peut-être la meilleure façon de le dire: alors que la session est active, alors il ou elle canon obtient une nouvelle session jusqu'à la fermeture du premier. et, oui, mon service sera principalement utilisé sur intranet. – avance70

Répondre

0

J'ai fait quelques progrès. Lorsque le client invoque le service pour la première fois, dans le constructeur, je sauvegarde son adresse IP et son contexte d'opération actuel.

alors, si quelqu'un de la même adresse IP se connecte, j'avorte le canal précédent que cette adresse IP utilisée (nouvelle connexion a la priorité):

operationContext.Channel.Abort(); 

je l'ai testé, et il semble libérer la session afin que d'autres puissent l'utiliser, mais je ne suis pas sûr - est-ce la meilleure solution?

+0

cela semble fonctionner pour l'instant, s'il vous plaît commenter si vous avez des suggestions. J'ai continué à googler pour une solution similaire, mais je n'ai rien trouvé d'utile. – avance70

0

Si vous avez besoin de 5 sessions ouvertes en même temps et que vous dites que maxConcurrentInstances ne génère qu'un seul client utilisable, avez-vous défini InstanceContextMode sur = PerSession? Vous l'avez probablement défini sur Single, dans ce cas, maxConcurrentCalls n'a aucun effet. Changez-le en PerSession et la configuration de limitation que ForeverDebugging a montré fonctionnera.

+0

tout est à peu près sur le réglage par défaut, instancecontextmode est la persession ... et si je mets maxConcurrentInstances = "1" je reçois seulement 1 session utilisable, et si je laisse maxConcurrentInstances par défaut, je peux utiliser environ 10 sessions je pense (qui est Assez pour le moment). – avance70

Questions connexes