2012-06-13 30 views
3

我们正面临着DownloadStringCompleted方法总是返回相同的结果在Windows Phone 7中的一个问题?为什么DownloadStringCompleted方法总是在windows phone 7中返回相同的结果?

首先绑定挂起的请求通过service.showing请求在列表框中放置两个按钮。当点击该调用接受服务,该服务更新表。 再次同时呼吁挂起的请求服务展示以前result.why请告诉我...

代码:

private void getpendingrequests() 
{ 
WebClient wcgetfriends = new WebClient(); 
        wcgetfriends.DownloadStringAsync(
        new Uri("http://{ipaddress}/Network/Reccords/GetFriends?userid=" + userId)); 
        wcgetfriends.DownloadStringCompleted += 
        new DownloadStringCompletedEventHandler(
            wcgetfriends_DownloadStringCompleted); 
} 



void wcgetfriends_DownloadStringCompleted(object sender, 
       DownloadStringCompletedEventArgs e) 
     { 

      String resultgetfriends = null, responseCode = null; 
      using (var reader = new StringReader(e.Result)) 
      { 
       resultgetfriends = reader.ReadToEnd(); 
      } 
      XmlReader xmlDoc = XmlReader.Create(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(resultgetfriends))); 

      while (xmlDoc.Read()) 
      { 
       if (xmlDoc.NodeType == XmlNodeType.Element) 
       { 

        if (xmlDoc.Name.Equals("ResponseCode")) 
        { 
         responseCode = xmlDoc.ReadInnerXml(); 

        } 

       } 

      } 
      if (Convert.ToInt32(responseCode) == 200) 
      { 

       string result1 = e.Result.ToString(); 

       XDocument xmlDocu = XDocument.Load(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(result1))); 

       interestrates = (from rts in xmlDocu.Descendants("Friend") 

           select new SampleCheckedData 
           { 

            Id = (string)rts.Element("userid"), 
            Name = (string)rts.Element("name"), 
            Icon = (string)rts.Element("imageurl"), 

           }).ToObservableCollection<SampleCheckedData>(); 


       this.lstFriendRequuest.ItemsSource = interestrates; 

      } 
      if (Convert.ToInt32(responseCode) == 201) 
      { 
       MessageBox.Show("UserId is not type of integer"); 
      } 
      if (Convert.ToInt32(responseCode) == 202) 
      { 
       MessageBox.Show("User not exists"); 
      } 
      if (Convert.ToInt32(responseCode) == 203) 
      { 
       MessageBox.Show("No Pending Requests"); 
      } 

     } 

private void requestaccept() 
{ 
WebClient wcacceptrequest = new WebClient(); 
        wcacceptrequest.DownloadStringAsync(
        new Uri("http://{ipaddress}/Network/Reccords/FriendRequestAcceptance?userid=" + userId + "&frienduserid=" + _id + "&acceptid=" + 1)); 
        wcacceptrequest.DownloadStringCompleted += 
        new DownloadStringCompletedEventHandler(
            wcacceptrequest_DownloadStringCompleted); 
        Image b = sender as Image; 
        var res = interestrates.Where(a => a.Id.Equals(((System.Windows.FrameworkElement)(e.OriginalSource)).Tag)).ToList(); 
        if (res.Count == 1) 
         interestrates.Remove(res.First()); 
} 

    void wcacceptrequest_DownloadStringCompleted(object sender, 
       DownloadStringCompletedEventArgs e) 
     { 

      String resultaccept = null, responseCode = null; 
      using (var reader = new StringReader(e.Result)) 
      { 
       resultaccept = reader.ReadToEnd(); 
      } 
      XmlReader xmlDoc = XmlReader.Create(new MemoryStream(System.Text.UTF8Encoding.UTF8.GetBytes(resultaccept))); 

      while (xmlDoc.Read()) 
      { 
       if (xmlDoc.NodeType == XmlNodeType.Element) 
       { 

        if (xmlDoc.Name.Equals("ResponseCode")) 
        { 
         responseCode = xmlDoc.ReadInnerXml(); 

        } 

       } 

      } 
      if (Convert.ToInt32(responseCode) == 200) 
      { 

       lstFriendRequuest.ItemsSource = ""; 
       interestrates = new ObservableCollection<SampleCheckedData>(); 
       bindGetFriends(); 

      } 
      if (Convert.ToInt32(responseCode) == 201) 
      { 
       MessageBox.Show("UserId is not type of integer"); 
      } 
      if (Convert.ToInt32(responseCode) == 202) 
      { 
       MessageBox.Show("Friend Id not type of integer"); 
      } 
      if (Convert.ToInt32(responseCode) == 203) 
      { 
       MessageBox.Show("Accept id not type of integer"); 
      } 

     } 

请告诉我为什么在bindfriends方法获得一个结果......

+0

你为什么要创建一个'StringReader'只是为了让一个字符串,当你已经*有'e.Result'中的字符串?为什么你将响应代码转换为一个整数很多次?你为什么用不同的方式解析XML文档两次?你为什么在一个字符串上调用'ToString'?你似乎正在使你的代码错综复杂...... –

+0

我改变了我的代码,因为你说过,但总是得到previuos导致下载字符串完整的方法。 – WP7

+0

请帮我试试那个没有... – WP7

回答

3

这几乎可以肯定是由于在电话内部或在某个网络代理内进行缓存而造成的。

有几件事情可以尝试做,以防止缓存 - 如果您想要始终禁用缓存,那么最快的一种方法是在GET请求的末尾添加一个唯一编号 - 例如,

   WebClient wcgetfriends = new WebClient(); 
       wcgetfriends.DownloadStringCompleted += wcgetfriends_DownloadStringCompleted; 
       wcgetfriends.DownloadStringAsync(
        new Uri(
         "http://{ipaddress}/Network/Reccords/GetFriends?userid=" 
         + userId 
         + "&ignored=" 
         + DateTime.UtcNow.Ticks)); 

还有其他类似的问题和答案:

+0

谢谢@Stuart它工作正常.... – WP7

+0

非常感谢,它的工作正常WP8也:) –

相关问题