在WinRT中下载网页会引发异常

时间:2011-11-28 19:11:47

标签: c# .net windows-runtime

我正在使用此代码在Metro风格应用中下载网页:

    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 Developer Preview,看看它是否解决了我的问题。

2 个答案:

答案 0 :(得分:4)

行。我找到了答案。例外情况是因为我在Windows 8开发人员预览版中安装了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 "";
        }
    }

其次,如果这不起作用,您可能会有一个与网络相关的软件阻止您的应用访问互联网。一个流行的案例是 proxifier 。如果您安装了代理程序您的MetroStyle应用程序将无法访问互联网。要使其正常运行,请参阅我的博客:

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

答案 1 :(得分:0)

非常确定netlimiter是通过localhost代理运行您的互联网请求,而您的应用没有&#34;本地网络&#34;能够允许这种访问本地网络的能力