2010-04-20 5 views
1

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.

Répondre

3

Juste une pensée .... mais avez-vous envisagé d'ajouter peut-être une base de données backend? Tous les services peuvent collecter des données et les conserver, puis votre application qui doit traiter les informations peut simplement interroger la base de données plutôt que de configurer des charges IPC entre les services.

+0

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

+0

@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

+0

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

1

WCF peut gérer le streaming. Il peut également utiliser MSMQ comme moyen de transport, ce qui garantit qu'aucun message n'est perdu, même si vos instruments commencent à produire de grandes quantités de données.

+0

Je pense que ce serait la conception la plus robuste, mais malheureusement, je suis dans un temps critique, et apprendre WCF/MSMQ sans beaucoup de bonnes ressources/tutoriels ne semble pas la voie à suivre pour ce projet particulier. Je garderai cette idée pour quand j'aurai un temps d'arrêt pour apprendre ces choses. – drharris

+0

Voir http://msdn.microsoft.com/en-us/netframework/dd939784.aspx. Ce n'est pas si dur. Et une fois la file d'attente configurée, la configuration de WCF pour l'utiliser est presque triviale. –