WCF Silverlight服务参考

时间:2011-10-19 14:08:22

标签: silverlight wcf

我在Silverlight应用程序中添加了ServiceReference。我把它叫做WcfServiceReference。我可以编写以下代码

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

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

2 个答案:

答案 0 :(得分:5)

Silverlight仅允许您使用异步方法使用WCF服务。一般的想法是,对外部服务的同步调用会占用UI线程,并使您的应用程序无响应,直到它们返回为止。请查看this questionthis blog post,了解有关Silverlight的更多讨论以及为何您被引导使用异步服务调用。引用博客文章,“插件架构的唯一目的是允许异步请求,以致插件无法锁定浏览器”。

Eric Lippert对即将到来的async-await模式的UI线程in this MSDN Magazine article的后台工作问题进行了很好的解释/讨论。绝对值得一读。

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

答案 1 :(得分:3)

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