Windows phone 8 dev:从未调用HttpWebRequest.BeginGetResponse回调

时间:2013-02-23 02:47:12

标签: c# windows-phone-8 windows-phone-8-emulator

我正在Windows 8机器上启动Windows Phone 8开发,并在visual studio 2012附带的模拟器上进行测试。我有一个主页面,上面有一个按钮。按下按钮后,它会发出http请求。

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    string uriString = "http://209.143.33.109/mjpg/video.mjpg?camera=1";
    var uri = new Uri(uriString);
    var httpWebRequest = HttpWebRequest.Create(uri);

    httpWebRequest.BeginGetResponse(new AsyncCallback(OnGettingResponse), httpWebRequest);
}

private void OnGettingResponse(IAsyncResult ar)
{
    var req = ar.AsyncState as HttpWebRequest;
    var response = (HttpWebResponse)req.EndGetResponse(ar);
    var responseStream = response.GetResponseStream();
}

我在OnGettingResponse上设置了一个断点。但是当我按下按钮时,断点永远不会被击中。

我错过了这里明显的一切吗?

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,即使等待太久后我的回叫也没有被调用。

我发现此stackoverflow回答https://stackoverflow.com/a/15041383并相应地修改了我的代码。这个问题的实际问题是提问者希望在Windows Phone 8下的HttpWebRequest中有一些超时功能。计时器对我来说无关紧要,所以我只采用了以下部分代码:

public async Task<string> httpRequest(HttpWebRequest request)
{
    string received;

    using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
    {
        using (var responseStream = response.GetResponseStream())
        {
            using (var sr = new StreamReader(responseStream))
            {

                received = await sr.ReadToEndAsync();
            }
        }
    }

    return received;
}

并将我对此方法的调用修改为:

var response = await httpRequest(request);

现在这对我来说很好。

我还仔细检查了ID_CAP_NETWORKING是否在WMAppManifest.xml中检查,并且互联网正在我的模拟器上工作。