J'aimerais avoir des commentaires sur la conception que j'ai actuellement planifiée. Fondamentalement, j'ai un certain nombre d'instruments externes, dont chacun devrait toujours être en cours d'exécution, la collecte de données spécifiques. Ma pensée était de créer un service pour chacun, toujours en cours d'exécution et d'interrogation des instruments, l'enregistrement, etc. Il pourrait y avoir un seul instrument, ou il pourrait y avoir 40.Observer plusieurs services Windows
Cependant, j'ai besoin d'une application pour consommer toutes ces données, faites quelques calculs dessus, et faites les graphiques, l'affichage, l'emailing, etc. Le kicker est que même si cette application n'est pas en cours d'exécution, les services doivent constamment consommer des données. En outre, ces services devraient presque toujours être supposés fonctionner sur les mêmes machines que l'application cliente elle-même, mais la possibilité de les mettre en réseau (comme .NET Remoting) est une fonctionnalité intéressante.
Ma question est ... est-ce le meilleur design? Si c'est le cas, comment puis-je faire la communication entre les services et l'application? J'ai regardé dans WCF, mais il semble être orienté vers les services Web de demande-réponse, pas quelque chose qui continue de diffuser des données à tout ce qui pourrait l'écouter. Sinon, devrais-je avoir ces services en contact avec un autre service Web utilisant WCF, qui compile alors les données à utiliser dans une visionneuse de client léger qui interroge souvent le service Web?
Tous les liens et les ressources seraient grandement appréciés. Les espaces de noms .NET pour mes recherches sont également appréciés. Si je n'étais pas clair à propos de quelque chose, faites le moi savoir.
J'ai réfléchi à cela, mais le problème est plus complexe que cela ... Chaque instrument génère de l'ordre de 1 Mo/seconde. Pendant l'exécution de l'application client, celle-ci est synthétisée à environ 1 Ko/seconde, ce qui est en fait nécessaire pour être stockée, ce qui est plus gérable. Mais, lorsque ce client ne fonctionne pas, il est facile de voir comment cette base de données pourrait atteindre des proportions inimaginables (pour un ordinateur de bureau). Fondamentalement, j'ai besoin d'avoir mis en place à où si rien ne l'observe, les données sont ignorées (mais enregistrées dans un format abrégé). – drharris
@drharris, vous pourriez avoir un champ dans la base de données (similaire à ce que font les sites web) qui indique que l'application cliente est en cours d'exécution. Conservez toujours les données uniquement lorsque le client est en cours d'exécution. Dans le cas contraire, connectez-le au fichier. – James
Ma première pensée a été ce qui se passe si l'application se bloque. Mais je pourrais le marquer avec un DateTime, et ne persister que si c'était dans les X dernières minutes ou quelque chose de similaire. Mec, je déteste me lancer dans le travail de DBA, mais je pense que c'est peut-être ma seule option ici. MSMQ devient beaucoup trop compliqué en termes d'architecture, et bien que j'aime le WCF pour les trucs sur le web, ça semble être trop compliqué. Je pense que DB est la voie à suivre. – drharris