【问题标题】:Silverlight Webservice ProblemSilverlight Web 服务问题
【发布时间】:2010-10-10 16:32:03
【问题描述】:

我有一个调用方法并返回通用列表的 Web 服务。 webservice的完成方法是这样的(注意:names和e.Result都是同类型的List):

   void SetNames()
   {    
        ServiceReference1.ServiceClient webservice = new ServiceReference1.ServiceClient();

        webservice.GetNameCompleted += new EventHandler<GetNameCompletedEventArgs>(webservice_GetNameCompleted);
        webservice.GetNameAsync();
    }
    private void webservice_GetNameCompleted(object sender, ServiceReference1.GetNameCompletedEventArgs e)
    {
       names = e.Result;     
    }

我遇到的问题是我只能在 webservice 方法中检索名称列表中的项目。每当我尝试在该方法之外的任何地方访问名称列表中的项目时,它都是空的。例如(这在文本框中不显示任何内容),

List<string> names = new List<string>();

public MainPage()
{
    InitializeComponent();
    SetNames();

    foreach (string name in names)
        textBox1.Text += name;
 }

但这会显示正确的东西:

private void webservice_GetNameCompleted(object sender, ServiceReference1.GetNameCompletedEventArgs e)
    {
       names = e.Result;

       foreach (string name in names)
          textBox1.Text += name;     
    }

我是 Silverlight 和 webservies 的新手,我可能看多了一些东西。我已经为此工作了一段时间,我觉得我需要寻求帮助。任何帮助将不胜感激!

【问题讨论】:

  • 如果我的回答有用,您能否给它投票。此外,如果 Serious 的回答回答了您的问题,您能否将他的回答标记为正确答案。声誉对 SO 意义重大:) 干杯
  • 我当然可以并且愿意。我的荣幸。
  • 好吧,我现在不能投票,但如果情况发生变化,我会投票给你,因为这些信息对我很有帮助。

标签: silverlight web-services linq-to-sql wcf


【解决方案1】:

在 Silverlight 中,所有对 Web 服务的调用都是异步(与 WPF 不同,WPF 也可以使用同步调用)。

这意味着调用 web 服务之后的代码将在服务向 Silverlight 客户端发送响应之前被调用。

因此,在 MainPage 构造函数中,foreach 循环在服务返回之前遍历集合,然后遍历空集合。

正确的方法是第二种:在服务响应后初始化集合,在专用于该任务的回调方法中:webservice_GetNameCompleted。

【讨论】:

  • 谢谢。我不知道 Web 服务到底发生了什么,但我知道它与服务有关。谢谢你的知识。
【解决方案2】:

您必须等待 Web Servicec 回调完成。 默认情况下,所有 Silverlight WCF Web 服务调用都是异步的。 您正在向 Web 服务发送请求,与使用 WCF 和 Silverlight 的 .asmx 不同,应用程序继续运行,而不是等待 Web 服务返回结果。

所以当你拨打这样的电话时:

public MainPage() 

{

InitializeComponent(); 
SetNames(); 

foreach (string name in names) 
    textBox1.Text += name; 

}

应用程序不会停止并等待 SetNames 返回它只是执行的值,并且由于 web 服务尚未返回结果,当您调用 foreach 时,您仍然有一个空白或空列表。

干杯

【讨论】:

  • 我也非常感谢这一点信息。很高兴逐步了解发生了什么。这肯定会帮助我推进项目。
猜你喜欢
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2011-07-20
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多