2010-10-12 6 views
0

Désolé, je ne peux pas poster le code mais voici ce qui se passe en détail.communication silverlight entre le client et le serveur

utilisateur ouvre un formulaire il ajoute un écouteur d'événement comme:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompleted); 

et envoie ensuite un message asynchrone au serveur pour obtenir des données de base de données nécessaire. en même temps, la forme ajoute une autre écouteur d'événement et envoie un autre message:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompletedAnother); 

de sorte que le client (formulaire) attend deux messages à renvoyer. dès que les messages sont retournés le formulaire affichera les données dans une grille.

Cela ne semble pas fonctionner comme prévu. en quelque sorte les messages se coincent quelque part. donc, je voudrais savoir si mon approche est fausse.


Un autre cas est, il y a cinq objets à l'écran que je peux cliquer. Ces cinq objets utiliseront la même classe à créer. en cliquant sur un objet apporte un formulaire avec les données correspondantes. Si je clique sur le premier objet, le formulaire ajoutera un écouteur d'événement et enverra un message au serveur. alors que le formulaire attend les données, je ferme le formulaire, puis ouvre un autre formulaire en cliquant sur un autre objet. Le nouveau formulaire ajoutera un écouteur d'événement et enverra un nouveau message au serveur.

Pendant ce temps, le serveur a travaillé le premier message de formulaire, et renvoie le résultat à la deuxième forme .. pas le premier (cela a été fermé).

c'est ce que je vis en ce moment. quelqu'un peut-il me donner une solution dès que possible pour le meilleur comportement et la compréhension de Silverlight et WCF. Je pense que je devrais envoyer un message d'arrêt au serveur ou quelque chose ..

------- vieille question ----------

Salut, je semble avoir un problème avec la communication entre le client et le serveur.

Lorsqu'un formulaire est ouvert, trois écouteurs sont ouverts. Chaque auditeur obtient les données requises.

Je pense (pas sûr) silverlight est bloqué alors qu'il communique en utilisant ces trois auditeurs en même temps. Donc, est-ce que je devrais utiliser un seul écouteur fonctionnant en même temps toujours dans silverlight? donc comme,

client demandant un serveur de données
client demandant des données B du client serveur sauvegarde des données C au serveur

ces étoffes ne peut se faire en même temps? Est-ce que je m'assure toujours d'un processus de communication unique entre le client et le serveur?

Merci

+1

hmm .. Pouvez-vous expliquer de façon plus concrète ce que vous entendez par « auditeur », et quel est exactement votre problème. Si vous pouviez fournir du code, ce serait mieux. Malheureusement, personne ne pourra vous répondre maintenant. – Eilistraee

Répondre

0

Le problème est que le gestionnaire d'événements indique juste « quand ce genre d'opération est terminée, appelez-moi ». Le gestionnaire d'événements n'est pas lié à l'appel spécifique, mais au type d'opération.

Si vous appelez deux fois la même opération, vous ne pouvez pas joindre deux gestionnaires d'événements et vous vous attendez à ce que chaque appel appelle le gestionnaire respectif. Ce qui se passe est que lorsqu'une opération est terminée, chaque gestionnaire attaché à cette opération sera appelé.

Vous pouvez résoudre votre problème comme suit:

  • attach un gestionnaire d'événement unique pour chaque opération spécifique
  • lorsque vous appelez yourOperation_Async(), vous pouvez passer un identifiant comme userState (le dernier paramètre)
  • Dans le gestionnaire d'événements, vous agissez en conséquence sur l'identificateur (vous pouvez le récupérer dans yourOperationCompledEventArgs.UserState), par ex. mettre à jour le bon formulaire.

exemple fictif:

... 
serviceClient.YourOperationAsync(formName); 
... 

void serviceClient_YourOperationCompleted(object sender, YourOperationCompletedEventArgs e) 
{ 
    if (e.UserState != null && e.UserState is string) 
    { 
     string formToUpdate = (string)e.UserState; 
     ... 
     ... update formToUpdate ... 
     ... 
    } 
} 
Questions connexes