4 votes

Communication interne entre un service et plusieurs applications utilisateur WCF C#

Je travaille actuellement sur un projet en c# où j'ai un service fonctionnant comme LocalSystem, et une application utilisateur (tray app) fonctionnant pour chaque utilisateur connecté.

J'ai besoin d'avoir des communications entre les deux. Initialement, j'ai mis en place un point de terminaison utilisant NetTcpBinding sur le service pour que les clients puissent se connecter et fournir leur nom d'utilisateur. Ensuite, chaque client configure lui-même un point de terminaison comme suit : net.tcp://localhost:5001/UserApp/'nom d'utilisateur', avec le partage de port activé. Le service peut alors se connecter à ce point de terminaison, en connaissant le nom d'utilisateur.

Cependant, en essayant de faire en sorte que le programme fonctionne bien avec l'UAC, j'ai rencontré quelques problèmes. Le partage de port avec l'UAC activé nécessite que l'utilisateur soit enregistré dans <'allowAccounts> de SMSvcHost.exe.config, et même si j'ai ajouté l'utilisateur, j'obtiens toujours l'erreur suivante en essayant d'enregistrer le point de terminaison ;

Le point de terminaison du service n'a pas réussi à écouter sur l'URI 'net.tcp://localhost:5001/UserApp/myuser' car l'accès a été refusé. Vérifiez que l'utilisateur actuel dispose d'un accès dans la section appropriée allowAccounts de SMSvcHost.exe.config.

J'ai également essayé de passer à NetNamedPipeBinding, qui fonctionne bien lorsqu'on héberge l'application utilisateur. Mais en utilisant cette liaison, le service ne peut pas accéder aux points d'extrémité ouverts par les clients.

En gros, j'ai besoin d'un moyen pour qu'un service unique fournisse un point de terminaison pour plusieurs applications utilisateur sur la même machine, et que le service puisse se connecter à plusieurs applications utilisateur et leur envoyer des mises à jour d'événements.

Des suggestions ?

2voto

Carsten König Points 14720

Dans ce cas, je penserais à utiliser des canaux de rappel au lieu d'ouvrir de nouveaux services sur le client (ok - c'est presque la même chose mais cela s'intègre mieux dans le cadre et les paramètres de WCF). Vous pouvez lire à ce sujet ici : Ce que vous devez savoir sur les appels à sens unique, les rappels et les événements.

0voto

ChrisNel52 Points 4014

Vous pouvez également consulter les services Duplex, en particulier le service "wsDualHttpBinding". Il est conçu pour faire exactement ce que vous demandez... permettre à la fois au service et au client d'envoyer des messages indépendamment l'un de l'autre.

http://msdn.microsoft.com/en-us/library/ms731064.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X