2009-02-13 6 views
0

J'ai un programme en C# qui se connecte à un serveur en utilisant un DuplexChannelFactory, et ce serveur peut appeler des méthodes du côté client par rappel, le problème est que je n'ai aucune idée comment accéder à la Main Thread était la connexion a été créée à partir des méthodes de rappel. Y a-t-il un moyen de le faire, en passant un objet, ou dois-je implémenter une couche de communication supplémentaire (BD, fichiers, etc.)?Accéder au thread principal avec le rappel

Espérons que ce n'était pas très confus.

Merci d'avance.

Répondre

0

Je ne suis pas sûr que je comprends tout à fait votre question, mais je vais prendre un coup de poignard à elle:

Ma compréhension de la question:

Vous avez un client et un serveur. Votre client envoie un appel de service Web au serveur et le serveur peut ensuite rappeler le client dans le processus de calcul de ce qu'il calcule. Ce niveau d'infrastructure fonctionne, mais vous avez des difficultés à communiquer entre l'état du rappel et l'état de la demande d'origine.

Je vois quelques options ici, selon la nature de l'état que vous essayez de partager.

1) Si l'état que vous essayez de partager ne tourne pas (IE, si vous le savez lorsque vous faites la demande) et n'est pas très grand, je pense que l'option la plus sensée serait de passer état avec l'appel webservice afin que le serveur peut le renvoyer au rappel.

2) Si l'état tourne, vous pouvez y accéder via un mécanisme global icky, mais threadsafe. Peut-être le singleton tant décrié, ou quelque chose de similaire.

3) Si l'état ne tourne pas, mais est important, vous pouvez envisager de pré-calculer la requête du serveur avant d'envoyer la demande initiale.

Il existe une variété de techniques, dont celles-ci ne sont que très peu nombreuses, mais il n'y a vraiment pas assez d'informations dans la question pour donner une bonne réponse.

+0

Merci pour la réponse. Je ne peux vraiment pas expliquer mieux que moi (manquant à la fois sur l'anglais et la grammaire technique), mais j'ai fini par résoudre mon problème parce que j'ai accès à l'objet CallBack en cours de création. Merci encore de toute façon. – user45320

0

Quelle est votre raison de vouloir accéder au fil principal? Avez-vous besoin de mettre à jour une interface utilisateur, et ne pouvez le faire que sur le thread principal?

Dans ce cas, consultez System.Windows.Forms.Control.Invoke, qui peut mettre en file d'attente un délégué à exécuter sur le thread d'interface utilisateur.

Questions connexes