2009-09-16 10 views
0

J'ai une application silverlight qui doit utiliser plusieurs services WCF. Les points de terminaison (URL) des services ne peuvent pas être codés en dur dans l'application Silverlight ou dans le fichier de configuration. Ils doivent être interrogés à partir d'un registre de service qui est lui-même un service WCF. Le problème est que je dois utiliser un appel asynchrone pour interroger le point de terminaison de service avant de pouvoir créer une instance du proxy de service réel. Je ne peux pas penser à un bon moyen d'attendre la réponse ou de bloquer les appels au service réel. Quelle est la meilleure façon d'utiliser le modèle Service Registry/Service Locator à partir de quelle application Silverlight?Utilisation d'un registre de service wcf/localisateur de service de Silverlight

var registry = new ServiceRegistryClient("http://localhost/ServiceRegistry.svc"); 
string url; 

registry.GetServiceCompleted += (s, e) => url = e.Result; 
registry.GetServiceAsync("MyService"); 

// now I want to create MyService, but I must wait somehow until url is returned 
var myService = new MyServiceClient(url); 
myService.DoSomethingAsync(); 

Répondre

0

Soit vous pouvez mettre en cache la recherche à partir du Registre, ou vous pouvez faire la recherche à chaque fois que vous voulez communiquer avec un service (normalement non recommandé).

Dans l'extrait de code que vous avez fourni, vous vous abonnez à l'événement GetServiceCompleted. C'est dans ce même gestionnaire (dans votre cas, l'expression lambda) que vous devrez soit mettre en cache la recherche et/ou initier l'appel au service.

HTH,

--larsw

Questions connexes