2009-07-17 8 views
1

Nous développons une application Windows Forms qui sera installée sur environ 1 000 PC. Les utilisateurs peuvent exécuter plusieurs instances de l'application en même temps. Les clients sont tous sur un intranet unique.Windows Forms & WCF - Communication d'application client

Des modifications de l'application peuvent provoquer des modifications d'enregistrement de base de données, qui à leur tour doivent être communiquées aux autres clients afin que leurs interfaces utilisateur soient mises à jour.

Notre équipe a parlé de deux approches différentes:

1. paquets Multicast

Le client source modifie les enregistrements et envoie ensuite un paquet de multidiffusion avec une charge utile que quelque chose a changé. Les autres clients reçoivent ceci et récupèrent les données spécifiées. Nous devons prendre en compte les cas où le paquet n'est pas reçu, en retombant sur la récupération active des données.

Ma question à ce stade est de savoir comment un client sait qu'il n'a pas reçu un paquet? (Ne sait pas ce que vous ne savez pas) Ce qui nous amène à un journal des événements avec des horodatages dans la base de données, et les contrôles de l'interface utilisateur suivre la dernière fois qu'ils ont été mis à jour. Ils sont mis au point, vérifient leur horodatage et mettent à jour au besoin. Quelqu'un d'autre a déclaré que les éléments de l'interface utilisateur se rechargeraient à chaque fois qu'ils sont mis au point (pensez aux modes dans Outlook, en plaçant les contrôles à l'avant d'un espace de travail avec CAB). Et que la multidiffusion consiste à mettre à jour les clients que leur contexte actuel a changé. S'ils le manquent, ils travaillent avec des données périmées jusqu'à ce qu'ils changent de mode et reviennent.

2. WCF et Callbacks

enregistrer des clients avec des contrats WCF pour callbacks sur une tcp obligatoire. La principale préoccupation technique à cet égard est le serveur de maintenance de nombreuses sockets ouverts. Nous avons lu sur la façon dont il n'est pas ouvert dans le sens traditionnel, il est endormi pendant un maximum de 90 secondes et ensuite rétabli à ce moment-là. Nous avons également lu sur le nombre maximal de connexions ouvertes qu'une machine Windows 2003 Server peut gérer, et comment modifier cela dans le registre.

Si nous avons 1000 connexions socket ouvertes sur un serveur, cela va-t-il s'effondrer?

Si quelqu'un a fait face à la même situation et a essayé ou évalué l'approche WCF, nous aimerions en entendre parler.

Répondre

1

Je n'ai pas implémenté une situation comme celle-ci. Cependant, je pense que l'une des liaisons duplex n'aurait pas nécessairement un surcoût élevé.

Tout dépend de la quantité d'informations que le serveur doit renvoyer aux clients. Je comprends que vous avez dit que l'information sera utilisée pour eux pour mettre à jour leur interface utilisateur. Cependant, il semble possible qu'ils n'aient pas tous besoin de la même quantité d'informations en même temps. Par exemple, si l'information sur la région de l'Ouest a changé, tous les 1000 clients voudront peut-être savoir s'il y a un changement, et ils voudront tous peut-être mettre à jour les informations sommaires sur la région de l'Ouest. besoin de voir les détails du changement.

Si tel est le cas, je recommanderais que le rappel ne fournisse que des informations sur ce que a changé, principalement au niveau du résumé. Laissez les clients qui sont intéressés par les détails du changement demander les détails.Vous pouvez même aller jusqu'à fournir tous les détails pour le haut ou deux niveaux de hiérarchie, puis pour le reste, il suffit d'inclure des informations disant "cela a changé à temps". De cette façon, selon le niveau de hiérarchie consulté par un client particulier, le client pourrait alors demander ou ne pas demander.

Si nécessaire, vous pouvez effectuer des mises à jour groupées. Si les clients n'ont besoin d'être mis à jour qu'une fois par seconde, vous pouvez accumuler les modifications pour la dernière seconde et les envoyer toutes en même temps.

Vous pouvez également utiliser certaines des liaisons Peer to Peer pour certaines tâches. Peut-être que les clients dans un domaine particulier de votre entreprise aimeraient en savoir un peu plus sur ce que les autres travaillent sur ce genre de chose.

+0

Vous touchez à beaucoup de choses dont nous avons discuté et auxquelles nous pensons, comme les mises à jour par lots. Vous avez souligné que je n'ai pas entièrement décrit l'environnement, mais il s'agit d'environ 1 000 utilisateurs sur le même LAN physique dans des bâtiments géographiquement adjacents. Les données ne couvrent pas plusieurs zones verticales, tous les utilisateurs regardent à peu près les mêmes données, certains peuvent modifier des éléments, et la plupart ne le peuvent pas, l'exception étant un module d'organisation personnelle. Je pense que votre réponse vous aide, donc +1, mais je vais voir si quelqu'un a essayé cela et connaît des problèmes de performance/ressources. Je vous remercie. – blu

+0

Génial. En fait, je serais intéressé d'apprendre le résultat de ceci; au moins de toute preuve de concept que vous pouvez faire. Ce serait une bonne chose pour vous de bloguer sur (indice, indice). –