Frage

Ich verwende diesen Code, um eine Webseite in meiner Metro -App herunterzuladen:

    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;
    }

Das Problem ist, dass wenn die Linie client.GetAsync(url) Läuft, es macht eine Ausnahme, in der steht:

An error occurred while sending the request. Aus Typ: HttpRequestException.

BEARBEITEN:

Ich habe die Innerexception verwendet, um weitere Informationen zu erhalten. Die erste ausgeworfene Ausnahme ist SocketException Mit der Nachricht unten:

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)

Bearbeiten 2: Ich habe das Beispiel von Microsoft heruntergeladen und ausgeführt und erhalte den gleichen Fehler:http://code.msdn.microsoft.com/windowsapps/httpclient-upload-lampe-f1abcc4e

The error is shown in the picture

EDIT 3: Ich habe das auf einer anderen Maschine geleitet und es hat gut funktioniert. Ich denke, es ist nichts falsch mit dem Code. Ich habe die Lösung kopiert und es bedeutet, dass die Lösung auch nichts auszusetzen ist. Ich versuche, die Windows-Entwicklervorschau erneut zu installieren, um festzustellen, ob mein Problem behoben wird.

War es hilfreich?

Lösung

OK. Ich fand die Antwort. Die Ausnahme war, weil ich das NetLimiter -Produkt unter Windows 8 Developer Preview installierte und irgendwie verhinderte, dass meine App auf das Internet zugreift.

AKTUALISIEREN:Zunächst ist dies der Code, in dem arbeitet JEDER Version von 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 "";
        }
    }

Zweitens, wenn dies nicht funktioniert, haben Sie eine netzwerkbezogene Software, die Ihre App beim Zugriff auf das Internet verhindert. Ein beliebter Fall ist Proxifier. Wenn Sie den Proxifier installiert haben Ihre Metrostyle -Apps können nicht auf das Internet zugreifen. Um es zum Laufen zu bringen, beziehen Sie sich bitte auf meinen Blog unter:

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

Andere Tipps

Ziemlich sicher, dass NetLimiter Ihre Internetanfrage über einen Localhost -Proxy ausführte, und Ihre App hatte nicht die Funktion "Lokales Netzwerk", die einen solchen Zugriff auf das lokale Netzwerk ermöglichen würde

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top