Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Silverlight的wcf服务注册表/服务定位器_Wcf_Silverlight_Service Locator - Fatal编程技术网

使用Silverlight的wcf服务注册表/服务定位器

使用Silverlight的wcf服务注册表/服务定位器,wcf,silverlight,service-locator,Wcf,Silverlight,Service Locator,我有一个silverlight应用程序,需要使用多个WCF服务。不能在silverlight应用程序或配置文件中硬编码服务的端点(URL)。它们必须从服务注册表中查询,该注册表本身就是一个WCF服务。 问题是,在创建真正的服务代理实例之前,我必须使用异步调用来查询服务端点。我想不出一个好方法来等待响应或阻止对real service的调用。 在silverlight应用程序中使用Service Registry/Service Locator模式的最佳方法是什么 var registry = n

我有一个silverlight应用程序,需要使用多个WCF服务。不能在silverlight应用程序或配置文件中硬编码服务的端点(URL)。它们必须从服务注册表中查询,该注册表本身就是一个WCF服务。 问题是,在创建真正的服务代理实例之前,我必须使用异步调用来查询服务端点。我想不出一个好方法来等待响应或阻止对real service的调用。 在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();

您可以缓存注册表中的查找,也可以逐个执行查找 您希望与服务通信的时间(通常不建议)

在您提供的代码片段中,您正在订阅GetServiceCompleted事件。正是在这个偶数处理程序(在您的例子中是lambda表达式)中,您需要缓存查找和/或启动对服务的调用

嗯,

--拉尔斯