WinRTでWebページをダウンロードすると、例外がスローされます
-
22-10-2019 - |
質問
このコードを使用して、メトロスタイルのアプリで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開発者のプレビューを再インストールして、問題が修正されるかどうかを確認しようとしています。
解決
わかった。答えを見つけました。例外は、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 "";
}
}
第二に、これがうまくいかない場合は、アプリがインターネットにアクセスするのを妨げるネットワーク関連のソフトウェアがあります。人気のあるケースの1つです プロキシファイア. 。 proxifierがインストールされている場合 メトロスタイルアプリはインターネットにアクセスできません。 それを機能させるには、私のブログを参照してください:
http://anoori.me/blog/general/use-proxifier-in-windows-8-without-fiddler2
他のヒント
NetLimiterがローカルホストプロキシを介してインターネットリクエストを実行していることを確認してください。アプリには、ローカルネットワークへのそのようなアクセスを可能にする「ローカルネットワーク」機能がありませんでした