我有一个需要使用多个WCF服务的silverlight应用程序。无法在silverlight应用程序或配置文件中对服务的端点(URL)进行硬编码。必须从Service Registry查询它们,Service Registry本身就是WCF服务。 问题是我必须使用异步调用来查询服务端点,然后才能创建真实服务代理的实例。我想不出一个好的方法来等待响应或阻止对真实服务的调用。 在Silverlight应用程序中使用Service Registry / Service Locator模式的最佳方法是什么?
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();
答案 0 :(得分:0)
您可以从注册表缓存查找,也可以单独执行查找 你想与服务沟通的时间(通常不推荐)。
在您提供的代码段中,您正在订阅GetServiceCompleted事件。即使是处理程序(在您的情况下,lambda表达式),您需要缓存查找和/或启动对服务的调用。
HTH,
- larsw