2012-10-12 4 views
5

Nous disposons d'un outil tiers hérité (développé en C/C++). L'outil possède un composant serveur qui exécute un serveur Windows qui exécute des tâches (requêtes de base de données longues enchaînées complexes). Il dispose également d'un module client installé sur tous les postes de travail des utilisateurs et les utilisateurs pourront ajouter des tâches, voir les tâches en cours d'exécution et leur progression, supprimer des tâches, c'est-à-dire gérer les tâches. Nous voulons développer un tel outil en interne en utilisant les technologies .NET.Comment concevoir cette application client/serveur dans .NET?

Actuellement, nous réfléchissons à la façon de concevoir un tel outil et nous avons l'impression qu'il nous manque des pièces critiques du puzzle.

Client: Nous avons décidé l'application de bureau client à développer dans WPF

serveur: nous sommes actuellement penser à développer comme l'application de la console, mais pas tout à fait sûr de savoir comment l'architecte il.

Les principales questions que nous avons sont

Comment une application console du serveur exposer les services Web ASMX ou WCF (afin que les clients WPF obtenir le statut des emplois), tout en exécuter les travaux?

Comment faire pour pousser les mises à jour de progression du serveur aux clients WPF en cas de modification?

Nous essayons de faire des recherches sur la façon de le faire, mais ne trouvons rien de pertinent au sujet. Tout pointeur vers des articles/conseils sera d'une grande aide.

+0

double possible: http://stackoverflow.com/questions/11170457/discussion-client-server-application-architecture –

+0

@MikeMcCaughan Le lien que vous avez mentionné semble bien être similaire mais il n'est pas, dans mon cas, mon serveur a un long travail à faire en plus de servir les clients. – Aron

+0

Essayez ceci: http://dasunhegoda.com/architecture-products/1180/ – Techie

Répondre

3

La confusion que vous avez est en supposant que l'exécution du travail et le point de terminaison WCF sont la même chose. Je diviserais cela en trois éléments principaux:

  1. Client Application qui a les éléments d'interface utilisateur pour la gestion des tâches.
  2. Point de terminaison de service WCF pour récupérer des informations sur le travail et envoyer des demandes de création/suppression de travaux.
  3. Application qui exécute les tâches.

application client

L'application cliente doit récupérer les données d'emploi dans le service WCF.Vous fournir des écrans pour l'affichage d'exécution/emplois créer des emplois/supprimer des emplois/etc

service WCF

Le service WCF exposerait paramètres nécessaires à l'application cliente. Cela peut inclure des éléments tels que: CreateJob, ViewJobs, DeleteJob, etc. Le service doit être en lecture/écriture dans le backend de votre base de données.

Demande d'emploi

La demande d'emploi serait de vérifier les nouveaux/emplois supprimés et effectuer tout ce qui est nécessaire pour le travail à compléter. Il mettrait à jour le statut du travail dans le backend de la base de données à partir duquel le service WCF lit. Cela pourrait être un travail SQL, un service Windows, une application console, etc., (je ferais probablement un service Windows puisque vous voulez probablement quelque chose qui fonctionne tout le temps pour traiter les tâches).

Questions

How can a server console application expose ASMX or WCF web services(so that WPF clients get the status of the jobs) WHILE CONTINUING TO RUN THE JOBS?

En séparant le service WCF de l'application en cours d'exécution des travaux c'est réduit à néant. Remarque: vous pouvez avoir des applications de console qui hébergent WCF et l'exécuteur de travaux, mais qui, conceptuellement, les considèrent comme des éléments distincts (l'hébergement dans la même application de console est juste un détail d'implémentation).

How to push progress updates from server to the WPF clients when there is a change?

je ne voudrais pas le faire. Je voudrais que l'interface utilisateur interroge de temps en temps ou fournisse un bouton d'actualisation pour récupérer le statut via le point de terminaison WCF. Si vous avez absolument besoin de faire cela, vous devez que Job executer publie les messages pendant qu'il exécute les jobs et que l'application client reçoive ces messages (peut-être MSMQ, Service Bus Implementation, BizTalk, etc.).

Pourquoi je préfère vote au serveur Push

Maintenant que je pense qu'il ya probablement des cas où je ferais un style push, et d'autres où je sondage. Si j'ai de nombreux clients hors site (connexion VPN ou sur Internet en général), les clients seraient interrogés car la bande passante et la latence réseau sont prohibitives. Si le nombre de clients est élevé, chaque message de mise à jour doit être envoyé à chaque client abonné. Dans ce cas j'aurais tendance à aller demander à ne pas dire de modèle.

Si les clients sont à l'interne et que vous avez besoin d'informations en temps réel, le modèle push aurait plus de sens. Dans ce cas, les clients peuvent se connecter à l'application serveur et envoyer des messages sur la connexion (je ne l'ai pas fait personnellement, donc je n'ai aucune recommandation sur la configuration, j'espère que quelque chose de plus haut qu'une socket).

Si vous souhaitez que les messages soient mis à jour, mais que les clients se trouvent à de nombreux endroits différents, un modèle pub/sub peut être le meilleur. Dans pub/sub, l'application pousserait les messages de mise à jour lorsqu'ils se produisent. Le système de messagerie vérifiera s'il y a des clients qui s'abonnent aux messages, et pour tous les clients qui s'abonnent, le système de messagerie leur transmet une copie du message. Dans votre exemple, un client enverra des messages à un travail et le système de messagerie enverra les mises à jour à l'emplacement spécifié par le client (le client a besoin d'un moyen d'accepter les messages).NServiceBus, BizTalk sont des exemples de ce type de communication.

+0

Merci pour l'explication détaillée. Très proche de ce que je cherche. Pouvez-vous expliquer pourquoi vous préférez interroger plutôt que pousser le serveur? – Aron

+0

Élargi ma réponse avec plus de pensées. D'un niveau élevé, j'ai tendance à faire des sondages à cause du confort et de la familiarité. Je travaille principalement sur des applications web qui se prêtent au modèle de réponse aux requêtes. –

1

On dirait que vous posez des questions sur les options d'hébergement pour les services WCF. Il existe quatre possibilités:

  1. auto-hébergement dans une application gérée - à savoir créer une application de la console, une autre application WPF etc qui crée alors un service et le maintient en vie alors qu'il (l'application de la console) est en vie.
  2. Managed Services Windows - crée un service Windows qui peut être démarré automatiquement par Windows quand il commence
  3. Internet Information Services (IIS) - L'HÉBERGEZ De même à un service ASP.NET
  4. processus Windows service d'activation (WAS) - nouveau service d'activation, je ne l'ai pas personnellement utilisé.

Détails complets here.

Pour répondre complètement à votre question, je n'utiliserais pas les services ASMX. Pour une bonne liste de raisons, voir this question.

Questions connexes