2014-02-26 52 views
0

在將Windows 8應用程序轉換爲Windows Phone但遇到WCF連接和異步通信問題的過程中。總結一下,我試圖調用一個連接到Ms SQL Server的WCF服務,但是對於所有的「await serviceClient.getEmployeesAsync();」或類似的接收「不能等待無效」。Win8到WP App異步/等待對話

什麼是解決這個問題最簡單的方法,因爲我有很多類似於Windows 8應用程序,但不是Windows Phone應用程序可以正常工作的方法。

private async void btnGetAllStaff_Click(object sender, RoutedEventArgs e) 
    { 
     //Create a client object to access the service 
     DataProvider.DataProviderClient serviceClient = new DataProvider.DataProviderClient(); 

     //Get the staff objects from the service 
     ObservableCollection<DataProvider.Employee> employees = await serviceClient.getEmployeesAsync(); 

     //Add the objects to the list view 
     foreach (DataProvider.Employee employee in employees) 
     { 
      lstStaff.Items.Add(employee.FirstName+" "+employee.LastName); 
     } 
    } 

我應該補充一點,我是WCF和網絡編程的新手!

感謝

+0

您只能等待任務或任務。 getEmployeesAsync方法需要返回一個任務或任務

+0

@ShawnKendrot這不是真的。您可以等待任何具有GetAwaiter方法的方法,該方法返回具有給定方法集的對象。 「任務」有這樣一種方法。您可以創建自己的類型,但也可以等待。 – Servy

+0

您的錯誤消息指出getEmployeesAsync返回void,您不能等待void –

回答

0

的WCF代理生成器內置到Visual Studio將產生TAP methods,但只有當它知道客戶端平臺支持async本身。否則,它將創建端點APMEAP。您所看到的是,以Async結尾的您的客戶端代理方法在Windows應用商店平臺上是TAP,但在Windows Phone平臺上是EAP。

最好的辦法是嘗試在項目中重用WCF客戶端代理代碼;例如,將其放入可移植類庫中並使用生成的TAP方法。如果您無法正常工作,請將客戶端代理放入PCL並創建TAP wrappers for the APM endpoints

+0

謝謝。如果這是更好的選擇,我也可以更改WCF服務或爲WP創建新服務? – TheIdiot

+0

@TheIdiot:沒有。問題出在WCF客戶端代理創建。 –