2010-09-01 4 views
0

Je dois créer une application qui utilisera Webclient plusieurs fois pour récupérer toutes les informations de "t" secondes d'un serveur.Plusieurs WebClient peuvent-ils interférer entre eux?

Voici un petit plan pour vous montrer ce que je fais dans ma demande:

  1. se connecter au client Web "USER_LOGIN" qui me retourne un GUID (ID utilisateur unique). Je l'enregistre et le conserve pour l'utiliser lors de futurs appels Web Client.
  2. Connectez-vous au client Web "USER_GETINFO" à l'aide du GUID que j'ai précédemment enregistré en tant que paramètre. Ce service Web renvoie un tableau de chaînes contenant toutes mes informations personnelles (mon nom, mon âge, mon adresse e-mail, etc.). => Je sauvegarde les informations du tableau de cette façon: Textblock.Text = e.Result [2].
  3. Démarrage d'un Dispatcher.Timer avec une coche de 2 secondes pour démarrer ma boucle. (Le but est de récupérer les informations et de les mettre à jour toutes les 2 secondes)
  4. Connectez-vous au client Web "USER GETFRIEND", qui se trouve dans ma minuterie, en lui donnant le GUID comme paramètre. Il me renvoie un tableau rempli d'informations sur mes amis (Nom, email, message, etc ...). J'ai inséré ce WebClient dans la minuterie afin que ma liste d'amis soit actualisée toutes les 2 secondes.

Je suis en mesure de créer toutes les étapes sans erreur jusqu'à l'étape 3. Lorsque j'appelle le client Web « USER_GETFRIEND » Je suis face à deux problèmes majeurs:

  • D'un côté, je remarquai que mon nombre de Thread a augmenté de façon spectaculaire. => J'ai toujours pensé que lorsqu'un WebClient avait fini ses instructions, il se fermait tout seul, mais apparemment cela n'arrive pas dans les appels asynchrones. Et de l'autre côté, j'ai été surpris de voir qu'utiliser le même proxy pour deux appels Webclient (ie: si je déclare test.MainSoapClient proxy = new test.MainSoapClient()), les données que je récupérerais de " USER_GETFRIEND "e.Result, a été envoyé directement à mon tableau" USER_GETINFO ". Et ainsi mes adresses de nom et de courrier électronique sur l'interface utilisateur ont été remplacées par la même valeur dans le tableau USER_GETFRIEND. Donc, mon nom est changé à mes amis e-mail et ainsi de suite ...

Je voudrais savoir s'il est possible de fermer un appel WebClient (ou fil) que je ne l'utilise plus pour éviter tout conflit? Ou si quelqu'un a une suggestion concernant mon code et la façon dont je devrais développer ma demande s'il vous plaît n'hésitez pas à proposer.

+0

Que voulez-vous dire par "WebClient"? –

+0

Juste pour info: Je programme en C# dans Silverlight 4. Ce que je veux dire par WebClient est de consommer un WebService.Lorsque vous faites cela dans Silverlight, il doit être en mode asynchrone et contenu dans un EventHandler. – Aymeric

+0

@John Saunders: Probablement ceci: http://msdn.microsoft.com/en-us/library/system.net.webclient(v=VS.95).aspx – dtb

Répondre

0

J'ai reçu la réponse il y a quelques semaines et je me suis rendu compte qu'il était important de répondre à ma propre question.

Mon problème tout était que je ne désinscris de mes appels asynchrones et que j'utilisais la même classe proxy de « Ajouter une référence de service »:

Alors, quand j'utilisais:

proxy.webservice += new Eventhandler<whateverinhere>(my_method); 

Je n'ai jamais fait:

proxy.webservice -= new Eventhandler<whateverinhere>(my_method); 

Espérons que cela aidera quelqu'un.