异步Web服务响应问题

时间:2010-11-05 10:44:03

标签: silverlight web-services asynchronous windows-phone-7

在我的WP7应用程序中,我正在使用这些方法调用和使用Web服务:

在我的页面.cs文件中:

    public void Page_Loaded(object sender, RoutedEventArgs e)
    {
        if (NavigationContext.QueryString["val"] == "One")
        {
            listAgences=JSON.callWSAgence("http://...");         

            InitializeComponent();
            DataContext = this;                
        }
    }

在我的json课程中,我有以下方法:

    public List<Agence> callWSAgence(string url)
    {

            WebClient webClient = new WebClient();
            Uri uri = new Uri(url);
            webClient.OpenReadAsync(uri);

            webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTestAgence);                

            return listAgences;
    }

    public void OpenReadCompletedTestAgence(object sender, OpenReadCompletedEventArgs e)
    {            
            StreamReader reader = new System.IO.StreamReader(e.Result);
            jsonResultString = reader.ReadToEnd().ToString();
            addAgencesToList();            
            reader.Close();
    }

    public void addAgencesToList()
    {                         
            jsonResultString = json.Substring(5, json.Length - 6);
            listAgences = JsonConvert.DeserializeObject<List<Agence>>(json);                    
    }

问题是json类中的OpenReadCompletedTest方法在

之后没有被调用
  webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTestAgence);

因此返回的listAgences为空。

但后来OpenReadCompletedTest被调用,所有内容都被罚款,但我的视图已被加载。

在解析webservice响应并填充我的列表后,我可以做些什么来进行同步调用或重新加载我的视图。

1 个答案:

答案 0 :(得分:0)

您看到的行为(问题)是因为网络请求是asynchronously

如果您想要一个单独的对象调用Web服务器,则需要处理回调以处理响应或自行进行适当的更改。

此外:
- 问题中的代码未显示变量json的定义。在Page_Loaded中,它看起来像是自定义类,但在OpenReadCompletedTestAgenceaddAgencesToList中,它看起来像一个字符串。
- Page_Loaded中的代码将listAgences的值设置为两次。

查看以下问题,了解有关同步拨打Faking synchronous calls in Silverlight WP7

的更多信息