2011-10-19 145 views
1

我已将ServiceReference添加到我的Silverlight应用程序。我已经调用它,WcfServiceReference。我可以编写以下WCF Silverlight服务参考

using (var client = new WcfServiceReference.WcfDataServiceClient()) 
    { 
     client.GetSpendDataTotalAsync(Guid.NewGuid()); 
    } 

我想我应该能够引用client.GetSpendDataTotal(不异步),但它是不可用的。然而,它是在应用程序中 - 我可以在我的服务中找到它...可能是显而易见的东西?

回答

5

Silverlight只允许您使用异步方法来使用WCF服务。总体思路是,对外部服务的同步调用将绑定UI线程,并在应用程序返回之前使应用程序无响应。请参阅this questionthis blog post以获取关于Silverlight的更多讨论,以及为什么要引导您使用异步服务调用。引用博客文章的话,“只允许异步请求的插件架构的整体目的是让插件无法锁定浏览器”。

Eric Lippert对后台工作捆绑关于即将到来的异步等待模式的UI线程in this MSDN Magazine article给出了一个很好的解释/讨论。绝对值得一读。

这里要记住的主要问题是,不管在后台可能发生多少有用的工作,如果UI没有响应,那么就用户而言,该应用程序什么都不做。在Silverlight中使用异步WCF服务调用允许您在等待结果的同时对UI执行其他操作,而不是让用户想知道为什么他们不能做任何事情。

3

Silverlight不允许对服务进行非异步调用。当您将Silverlight访问编码为WCF服务时,请考虑异步。