2011-08-04 58 views
0

我使用WCF DataService的我有一个方法:WCF阻塞调用

[OperationContract] 
    public List<string> GetAges() 
    { 
     return _registrationData.GetAges(); 
    } 

在我的客户端,我实例化这种方式:

_registrationDataServices = new RegistrationDataServiceClient(); 

它现在公开委托

_registrationDataServices.GetAgesCompleted += GetAgesCompleted; 

和函数调用:

_registrationDataServices.GetAgesAsync() 

与此问题是,该服务的调用将是异步的,结果出现在委托函数中,我希望能够调用服务并等待(阻止),直到结果返回,这怎么能使用WCF完成?

我必须使用wcf,因为我有一个需要来自数据库的数据的silverlight应用程序,WCF从.NET程序集调用为我的数据访问层。

+2

可能的重复http://stackoverflow.com/questions/647481/how-i-can-implement-sync-calls-to-wcf-services-in-silverlight –

+0

Silverlight是为了让你不能阻止线。你为什么需要这样做? – svick

+0

谁创建了RegistrationDataServiceClient类?网上有文档吗? .GetAges函数是不是异步?你实际需要的是该函数的非异步版本。 –

回答

4

从一个Silverlight/WPF应用程序同步调用Web服务是非常糟糕的做法。同步呼叫会挂起您的用户界面,直到Web服务呼叫结束,这将导致不良的用户体验。 但是,如果你仍然为它,here is a very helpful link

+3

我完全同意不好的练习评论。互联网是一个有趣的野兽,你应该总是认为最坏的情况会发生在你的电话上。 –

0

不要同步调用它 - 你会阻止UI线程。如果用户界面被冻结,用户通常认为他们的软件崩溃了。

理想情况下,您会制作一个模态繁忙指示符,用于在您等待呼叫回来时动画并显示“进度”,并在收到“已完成”事件时消失。

即使您仍然确信阻止UI线程在您的情况下是OK的,您实际上不能实际调用它!它的设计是有原因的 - 按照流程进行。

+0

您可以在GUI中使用BusyIndi​​cator对象。 –