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:
- Client Application qui a les éléments d'interface utilisateur pour la gestion des tâches.
- 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.
- 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.
double possible: http://stackoverflow.com/questions/11170457/discussion-client-server-application-architecture –
@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
Essayez ceci: http://dasunhegoda.com/architecture-products/1180/ – Techie