Question

J'utilise ce code pour télécharger une page Web dans mon application 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;
    }

le problème est que lors de l'exécution de client.GetAsync(url) ligne, il renvoie une exception qui dit:

De An error occurred while sending the request. Type:. HttpRequestException

EDIT:

Je l'ai utilisé la InnerException pour obtenir plus d'informations. La première exception levée est SocketException avec le message ci-dessous:

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)

EDIT 2: Je l'ai téléchargé et couru l'échantillon de Microsoft et je reçois la même erreur: http://code.msdn.microsoft.com/windowsapps/HttpClient- Télécharger-échantillon-f1abcc4e

L

EDIT 3: J'ai couru ceci sur une autre machine et il a bien fonctionné. Donc, je suppose qu'il n'y a rien de mal à ce code. Je copiais la solution et cela signifie qu'il n'y a rien de mal avec de la solution non plus. Je suis en train de re-installer Windows Developer Preview pour voir si elle résout mon problème.

Était-ce utile?

La solution

OK. J'ai trouvé la réponse. L'exception a été installé parce que je produit NetLimiter sur Windows 8 Developer Preview et d'une certaine manière a empêché mon application d'accéder à Internet.

Mise à jour: Tout d'abord, c'est le code de travail dans TOUS version 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 second lieu, si cela ne fonctionne pas, les chances sont, vous disposez d'un logiciel lié réseau empêchant votre application d'accéder à Internet. Un cas est populaire proxifier . Si vous avez installé proxifier vos applications metrostyle ne seront pas en mesure d'accéder à Internet Pour le faire fonctionner, s'il vous plaît se référer à mon blog à l'adresse:.

http://anoori.me/blog/ général / use-proxifier-in-windows-8-sans-Fiddler2

Autres conseils

assez sûr NetLimiter est en cours d'exécution de votre demande Internet via un proxy localhost et votre application n'a pas la capacité « réseau local » qui permettrait un tel accès au réseau local

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top