2009-06-09 7 views
0

Dans Silverlight, j'ai rencontré le problème suivant. Si vous envoyez plusieurs demandes au service Web, les réponses risquent de ne pas être renvoyées dans une séquence ordonnée. Signification si la première demande est plus longue que les suivantes, sa réponse sera de retour enfin:Suppression des réponses WCF obsolètes dans Silverlight

1. Sending request A.. (takes longer for some reason) 
2. Sending request B.. 
3. Sending request C.. 
4. ... 
5. Receiving response B 
6. Receiving response C 
7. Receiving response A 

Maintenant, dans mon scénario, je ne suis intéressé par la plus récente demande être fait. Donc A et B devraient être discutés et C devrait être gardé comme seule réponse acceptée.

Quelle est la meilleure approche pour gérer cela? J'ai trouvé cette solution jusqu'à présent:

Passez un GUID généré en tant qu'objet utilisateur lors de l'envoi de la requête et stockez cette valeur quelque part. Comme toutes les réponses contiendront leur GUID respectif, vous pouvez filtrer les réponses périmées. Un compteur de requêtes au lieu d'un GUID fonctionnerait également.

Maintenant, je me demande s'il existe de meilleures approches à ce sujet. Peut-être y at-il des fonctionnalités prêtes à l'emploi pour rendre cela possible? Toutes les idées sont les bienvenues ..

Répondre

2

Je prends une approche similaire dans mes services Web non-WCF ASP.NET, bien que j'utilise le DateTime de la demande au lieu et puis juste stocker l'DateTime de la demande la plus récente. De cette façon, je peux faire une comparaison directe moins que de déterminer si le service de retour est le plus récent ou non. J'ai effectivement cherché à annuler les anciens appels de service avant d'en créer de nouveaux, mais il n'y a pas d'appel CancelAsync pour les services Web dans Silverlight et je n'ai pas réussi à trouver une manière équivalente de le faire.

0

Ces deux approches sont ce que j'ai pris lorsque j'ai travaillé sur un système en temps réel avec beaucoup d'appels de service. Fondamentalement juste avoir un moyen de garder une trace de l'ordre (variable incrémentation, horodatage, etc.) puis garder la trace de la réponse la plus élevée reçue. Si la réponse actuelle est inférieure à la plus élevée, supprimez-la.

Questions connexes