WCF阻止调用

时间:2011-08-04 22:54:46

标签: wpf silverlight wcf

我正在使用WCF DataService我有一个方法:

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

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

_registrationDataServices = new RegistrationDataServiceClient();

它现在公开了一个代表

_registrationDataServices.GetAgesCompleted += GetAgesCompleted;

和函数调用:

_registrationDataServices.GetAgesAsync()

这个问题是对服务的调用是异步的,结果来自委托函数,我希望能够调用服务并等待(阻塞)直到结果返回,这怎么可能使用WCF完成?

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

2 个答案:

答案 0 :(得分:4)

从Silverlight / WPF应用程序同步调用Web服务是一种非常糟糕的做法。同步调用将挂起您的UI,直到Web服务调用结束,这将导致糟糕的用户体验。 但是,如果你还在努力,here is a very helpful link

答案 1 :(得分:0)

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

理想情况下,您会在等待呼叫返回时创建一个模态忙碌指示器来动画并显示“进度”,当您收到完成事件时它会消失。

即使您仍然确信在您的情况下阻止UI线程是正常的,您实际上无法同步调用它!它是出于某种原因而设计的 - 顺其自然。