将 Web 服务与 Silverlight 和 WPF 一起使用之间的区别

本文关键字:之间 区别 一起 WPF 服务 Web Silverlight | 更新日期: 2023-09-27 18:31:42

我在后端Web服务中编写了一个简单的WebMethod。我将其用作 WPF 应用程序和 Silverlight 应用程序中的服务参考。

该方法返回一个名为 userListList<string>。这在 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 应用程序中,我将文本附加到 richTextBox 中,其中包含 userList,这有效,但在 Silverlight 中richTextBox1.AppendText不是一个有效的选项。

我在 Silverlight 应用程序中哪里出错了?

将 Web 服务与 Silverlight 和 WPF 一起使用之间的区别

Silverlight 中的所有 Web 服务调用都是异步的,这意味着您无法在应用程序块等待结果返回时执行它。相反,你告诉 Silverlight 当它得到结果时该怎么做,并让它在那之前继续自己的业务。

Silverlight 应用程序的 Web 服务客户端要求您向其传递一个事件处理程序,该处理程序将 Web 方法的返回值作为 xxxCompleteEventArgs 参数,其中"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;
    }
}