2011-10-19 191 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服務時,請考慮異步。