3

このコードを使用して、Metro Style アプリで Web ページをダウンロードしています。

    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

エラーは写真に示されています

編集 3: これを別のマシンで実行したところ、問題なく動作しました。したがって、コードに問題はないと思います。ソリューションをコピーしましたが、ソリューションにも問題がないことを意味します。問題が解決するかどうかを確認するために、Windows Developer Preview を再インストールしようとしています。

4

2 に答える 2

4

わかった。私は答えを見つけました。例外は、Windows 8 Developer Preview に NetLimiter 製品をインストールしたため、アプリがインターネットにアクセスできなくなったためです。

更新: まず第一に、これは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 "";
        }
    }

第 2 に、これが機能しない場合は、ネットワーク関連のソフトウェアがアプリのインターネット アクセスを妨げている可能性があります。人気のあるケースの 1 つはproxifierです。Proxifier がインストールされている場合、MetroStyle アプリはインターネットにアクセスできません。機能させるには、次の私のブログを参照してください。

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

于 2011-11-29T17:40:49.407 に答える
0

netlimiter が localhost プロキシを介してインターネット リクエストを実行していたこと、およびローカル ネットワークへのそのようなアクセスを許可する「ローカル ネットワーク」機能がアプリにないことを確認してください。

于 2015-01-16T17:46:23.213 に答える