【问题标题】:WP7 - Lost object's reference when making an asynchronous request/responseWP7 - 进行异步请求/响应时丢失对象的引用
【发布时间】:2012-04-29 15:15:41
【问题描述】:

我正在向服务发出请求并得到响应。服务工作正常,我反序列化一个对象没有问题。

以下是我的代码示例。问题是结果对象最后为空。我不知道为什么我会失去参考。什么是正确的解决方案?

        HttpWebRequest hwrq = (HttpWebRequest)WebRequest.Create("http://service.svc/Login");
        hwrq.ContentType = "application/x-www-form-urlencoded; encoding='utf-8'";
        hwrq.Accept = "text/xml";
        hwrq.Method = "POST";

        Users result = null; // object initializaiton

        hwrq.BeginGetRequestStream(ar =>
        {
            var requestStream = hwrq.EndGetRequestStream(ar);
            using (var sw = new StreamWriter(requestStream, System.Text.Encoding.UTF8))
            {
                sw.Write("Username Password");
                sw.Close();
            }

            hwrq.BeginGetResponse(a =>
            {
                var response = hwrq.EndGetResponse(a);
                var responseStream = response.GetResponseStream();
                using (var sr = new StreamReader(responseStream))
                {
                    returnedXML = sr.ReadToEnd();

                    XmlSerializer xds = new XmlSerializer(typeof(Users));

                    byte[] byteArray = Encoding.UTF8.GetBytes(returnedXML);
                    MemoryStream stream = new MemoryStream(byteArray);

                    result = (Users)xds.Deserialize(stream); // object is correct
                }
                responseStream.Close();
                response.Close();
            }, null);
        }, null);

        return result; // object is null!

【问题讨论】:

  • return 语句在BeginGetResponse 回调被触发之前执行,因此返回为空,这并没有错和异常。
  • 如果不是在方法的末尾,我应该在代码的哪个位置返回我的对象​​?
  • 你不应该返回这个对象。您应该改用某种回调。
  • 这对我来说是新事物。谢谢你的建议。

标签: windows-phone-7 asynchronous httpwebrequest httpwebresponse


【解决方案1】:

就像 MarcinJuraszek 建议的那样,正确的方法是进行回调并在那里处理结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多