Pregunta

Estoy usando este código para descargar una página web en mi aplicación 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;
    }

El problema es que cuando la línea client.GetAsync(url) Corre, lanza una excepción que dice:

An error occurred while sending the request. Del tipo: HttpRequestException.

EDITAR:

He usado la Innerexception para obtener más información. La primera excepción lanzada es SocketException Con el mensaje a continuación:

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)

Editar 2: Descargé y ejecuté la muestra de Microsoft y obtengo el mismo error:http://code.msdn.microsoft.com/windowsapps/httpclient-upload-sample-f1abc4e

The error is shown in the picture

Editar 3: ejecuté esto en otra máquina y funcionó bien. Así que supongo que no hay nada de malo en el código. Copié la solución y significa que tampoco hay nada de malo en la solución. Estoy tratando de reinstalar la vista previa del desarrollador de Windows para ver si soluciona mi problema.

¿Fue útil?

Solución

ESTÁ BIEN. Encontré la respuesta. La excepción fue porque instalé el producto NetLimiter en la vista previa del desarrollador de Windows 8 y de alguna manera impidió que mi aplicación accediera a Internet.

ACTUALIZAR:En primer lugar, este es el código que funciona en CADA Versión de 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 "";
        }
    }

En segundo lugar, si esto no funciona, es probable que tenga un software relacionado con la red que evite que su aplicación acceda a Internet. Un caso popular es proxificador. Si tiene el proxificador instalado Sus aplicaciones MetroStyle no podrán acceder a Internet. Para que funcione, consulte mi blog en:

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

Otros consejos

Bastante seguro de que NetLimiter estaba ejecutando su solicitud de Internet a través de un proxy local, y su aplicación no tenía la capacidad de "red local" que permitiría dicho acceso a la red local

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top