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

StackOverflow https://stackoverflow.com/questions/8300986

  •  22-10-2019
  •  | 
  •  

Вопрос

Я использую этот код для загрузки веб -страницы в моем приложении 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.

РЕДАКТИРОВАТЬ:

Я использовал 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, чтобы увидеть, решает ли это моя проблема.

Это было полезно?

Решение

ХОРОШО. Я нашел ответ. Исключение было потому, что я установил продукт NetLimiter в предварительный просмотр разработчиков Windows 8, и каким -то образом это помешало моему приложению получить доступ к Интернету.

ОБНОВИТЬ:Прежде всего, это код, работающий в КАЖДЫЙ Версия 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 "";
        }
    }

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

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

Другие советы

почти уверен, что NetLimiter запускал ваш интернет -запрос через прокси -сервер Localhost, и ваше приложение не имело возможности «локальной сети», которая позволила бы такой доступ к локальной сети

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top