HttpWebRequest.EndGetResponse()在Windows Phone 7.1上返回null?

时间:2011-06-26 14:19:43

标签: c# .net windows-phone-7

我不太明白为什么EndGetResponse()在以下代码中返回null:

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        var request = WebRequest.Create("http://www.microsoft.com");
        using (var response = request.EndGetResponse(request.BeginGetResponse(ar => { }, null)))
        using (var responseStream = response.GetResponseStream())
        using (var reader = new StreamReader(responseStream))
        {
            string content = reader.ReadToEnd();
        }
    }

(重现,用上面的代码替换新创建的Windows Phone应用程序中的空Application_Launching处理程序)

这是框架中的错误吗?

1 个答案:

答案 0 :(得分:2)

显然我犯了一个典型的noob错误,我敢于阻止主/ UI线程。看来Silverlight希望不惜一切代价避免这种情况,并立即返回null来拒绝我的请求。好的,但抛出一个合适的异常而不是返回文档甚至没有提到的值作为一种可能性,这不是很好吗?

无论如何,这是更正后的代码:

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        var request = WebRequest.Create("http://www.microsoft.com");
        var asyncResult = request.BeginGetResponse(
            ar =>
            {
                using (var response = request.EndGetResponse(ar))
                using (var responseStream = response.GetResponseStream())
                using (var reader = new StreamReader(responseStream))
                {
                    string content = reader.ReadToEnd();
                }
            }, null);
    }