我正在使用WCF DataService我有一个方法:
[OperationContract]
public List<string> GetAges()
{
return _registrationData.GetAges();
}
在我的客户端,我以这种方式实例化:
_registrationDataServices = new RegistrationDataServiceClient();
它现在公开了一个代表
_registrationDataServices.GetAgesCompleted += GetAgesCompleted;
和函数调用:
_registrationDataServices.GetAgesAsync()
这个问题是对服务的调用是异步的,结果来自委托函数,我希望能够调用服务并等待(阻塞)直到结果返回,这怎么可能使用WCF完成?
我必须使用wcf,因为我有一个需要来自数据库的数据的silverlight应用程序,WCF是从.NET程序集中调用的,作为我的数据访问层。
答案 0 :(得分:4)
从Silverlight / WPF应用程序同步调用Web服务是一种非常糟糕的做法。同步调用将挂起您的UI,直到Web服务调用结束,这将导致糟糕的用户体验。 但是,如果你还在努力,here is a very helpful link。
答案 1 :(得分:0)
不要同步调用它 - 你将阻止UI线程。如果UI被冻结,用户通常认为他们的软件已经崩溃。
理想情况下,您会在等待呼叫返回时创建一个模态忙碌指示器来动画并显示“进度”,当您收到完成事件时它会消失。
即使您仍然确信在您的情况下阻止UI线程是正常的,您实际上无法同步调用它!它是出于某种原因而设计的 - 顺其自然。