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 ?