2012-04-20 110 views
0

我在後端web服務中編寫了一個簡單的WebMethod。我將它用作WPF應用程序和Silverlight應用程序中的服務引用。使用Web服務與Silverlight和WPF之間的區別

該方法返回一個List<string>,調用userList。這在WPF應用程序中運行良好,我在其中將Service1SoapClient稱爲「客戶端」。有前調用該方法通過 -

client.userlist(); //this is the case in WPF app 

但是在Silverlight中唯一的選擇是

client.userListAsync(); //Silverlight 

這在WPF工作正常,並帶回所需的列表,但是Silverlight爲後面的錯誤 -

Error 11 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<string>' 

也與此有關,在WPF應用程序中,我使用userList附加了帶有richTextBox的文本,該文件可以工作,但是在Silverlight中richTextBox1.AppendText不是val ID選項。

我在Silverlight應用程序中出錯的地方?

回答

3

Silverlight中的所有Web服務調用都是異步的,這意味着您在等待結果返回時無法使應用程序塊執行。相反,你告訴Silverlight在獲得結果時應該怎麼做,並讓它繼續自己的業務,直到那時。

您的Silverlight應用程序的Web服務客戶端需要您傳遞一個事件處理函數,它將Web方法的返回值作爲xxxCompletedEventArgs參數,其中「xxx」是Web方法的名稱。

此頁面:http://msdn.microsoft.com/en-us/library/cc197937(v=vs.95).aspx告訴您如何設置您的事件處理程序並使用它來處理Web服務調用的輸出。

從頁面:

proxy.GetUserCompleted += new EventHandler<GetUserCompletedEventArgs (proxy_GetUserCompleted); 
    proxy.GetUserAsync(1); 
    //... 
} 

//... 

void proxy_CountUsersCompleted(object sender, CountUsersCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     userCountResult.Text = 「Error getting the number of users.」; 
    } 
    else 
    { 
     userCountResult.Text = "Number of users: " + e.Result; 
    } 
} 
+0

請務必取消與相同的代理對象,您將在每次執行執行proxy_CountUsersCompleted再次下一次執行,否則註冊事件處理程序。 – Stainedart 2012-04-20 17:39:54

+0

優秀的答案。鏈接正是我所需要的。作品一種享受。 – Ebikeneser 2012-04-21 14:01:20

相關問題