Загрузка веб-страниц в WinRT вызывает исключение

Я использую этот код для загрузки веб-страницы в приложении Metro Style:

    public static async Task<string> DownloadPageAsync(string url)
    {
        HttpClientHandler handler = new HttpClientHandler();
        handler.UseDefaultCredentials = true;
        handler.AllowAutoRedirect = true;
        HttpClient client = new HttpClient(handler);
        HttpResponseMessage response = await client.GetAsync(url);

        response.EnsureSuccessStatusCode();

        string responseBody = response.Content.ReadAsString();
        return responseBody;
    }

проблема заключается в том, что при выполнении строки client.GetAsync(url) она выдает исключение, в котором говорится:

An error occurred while sending the request. От типа: HttpRequestException.

EDIT:

Я использовал InnerException для получения дополнительной информации. Первое исключение - SocketException с сообщением ниже:

An attempt was made to access a socket in a way forbidden by its access permissions

at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

ИЗМЕНИТЬ 2: Я загрузил и запустил образец из Microsoft и получил ту же ошибку: http://code.msdn.microsoft.com/windowsapps/HttpClient-Upload-Sample-f1abcc4e

The error is shown in the picture

ИЗМЕНИТЬ 3: Я запускал это на другой машине, и он работал нормально. Поэтому я думаю, что нет ничего плохого в коде. Я скопировал это решение, и это означает, что в решении нет ничего плохого. Я пытаюсь переустановить Windows Developer Preview, чтобы узнать, исправляет ли он мою проблему.

Ответы

Ответ 1

OK. Я нашел ответ. Исключение было связано с тем, что я установил продукт NetLimiter в Windows 8 Developer Preview и каким-то образом он помешал моему приложению получить доступ к Интернету.

UPDATE: Прежде всего, это код, работающий в версии КАЖДЫЙ Windows 8.

    public static async Task<string> DownloadPageAsync(string url)
    {
        try
        {
            HttpClientHandler handler = new HttpClientHandler { UseDefaultCredentials = true, AllowAutoRedirect = true };
            HttpClient client = new HttpClient(handler);
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            string html = await response.Content.ReadAsStringAsync();
            return html;
        }
        catch (Exception)
        {
            return "";
        }
    }

Во-вторых, если это не работает, скорее всего, у вас есть сетевое программное обеспечение, препятствующее доступу вашего приложения к Интернету. Один популярный случай - прокси-сервер. Если у вас установлен прокси-сервер, ваши приложения MetroStyle не смогут получить доступ к Интернету. Чтобы это сработало, обратитесь к моему блогу по адресу:

http://anoori.me/blog/general/use-proxifier-in-windows-8-without-fiddler2

Ответ 2

довольно уверен, что netlimiter запускал ваш интернет-запрос через прокси-сервер localhost, и ваше приложение не обладало возможностью "локальной сети", которая позволяла бы такой доступ к локальной сети