0 votes

Exécuter un hôte de service WCF et un proxy client WCF sur le même formulaire Windows

Bonjour nous essayons de construire un "web" de clients connectés, où chaque client.exe fournit également l'hôte de service auquel les clients distants se connectent.

L'idée est que chaque fois qu'un client distant se connecte au client local, un formulaire est utilisé pour montrer visuellement les clients distants connectés. Chaque fois qu'un nouveau client distant se connecte ou se déconnecte, le formulaire est mis à jour depuis l'instance de service.

Cependant, le client local accède également au même formulaire pour diverses raisons (fournir à l'utilisateur des moyens d'interagir avec les clients distants).

Ma question est la suivante : quand pourrais-je rencontrer des problèmes de synchronisation et de problèmes de thread lorsque le proxy client et l'hôte de service accèdent au formulaire ? Le service est configuré avec ConcurrencyMode.Single et Session.Required. Le client est un singleton. J'utilise déjà des verrous pour synchroniser l'accès aux membres, les rappels du service sont également thread-safe. Pourtant, peut-il y avoir des deadlocks ? La charge est minimale : au plus 2 clients enverraient des données à la fois, et le nombre total de clients ne dépasserait pas 25. Fondamentalement, l'application serait utilisée pour qu'UN (1) client puisse parler à UN autre client.

NB : Je comprends qu'il est également possible de n'exécuter qu'un seul service WCF sur une machine dédiée à laquelle tous les clients peuvent se connecter. Je pose toujours des questions sur ce scénario particulier, où chaque client fournit également un hôte de service. Merci.

1voto

John Saunders Points 118808

N'avez-vous pas répondu à votre propre question?

Bien sûr, vous aurez des problèmes de synchronisation. Certains d'entre eux seront résolus par le fait que les contrôles WinForms ne peuvent être accédés que depuis le thread qui les a créés. Vous devrez effectuer tout votre travail d'interface utilisateur sur ce thread en appelant les méthodes Control.Invoke ou Control.BeginInvoke.

D'un autre côté, il n'y a aucun problème inhérent à l'hébergement d'un service WCF dans le même processus que les proxies WCF. En fait, j'ai récemment pu écrire un test unitaire qui utilisait une classe proxy pour accéder à un service fictif hébergé dans le test unitaire.

0voto

Timores Points 9916

Dès que vous avez plusieurs threads et verrous, vous pouvez avoir des interblocages, mais ce sont des bugs, pas des problèmes inhérents à la conception.

Dans le cas spécifique, n'oubliez pas d'utiliser Invoke pour accéder au formulaire, car vous ne pouvez le faire que dans le thread qui l'a créé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X