Windows Phone 8アプリケーションを開発しています。アプリを実行しようとすると、このエラーが発生します。
私のエラーの説明
タイプSystem.Net.WebExceptionの例外がSystem.Windows.ni.dllで発生しましたが、ユーザーコードでは処理されませんでした。
マイコード
private async void buttonStringGet_Click_1(object sender, RoutedEventArgs e)
{
JsonWebAsync.JsonWebClient client = new JsonWebAsync.JsonWebClient();
var resp = await client.DoRequestAsync("myurl");
string result = resp.ReadToEnd();
resultText.Text = result;
}
何らかの理由で、リモートWebサーバーが404 Not Foundで応答しているようです。サーバーが正しいことをしているのかもしれません。もしそうなら、あなたのアプリケーションはこの応答を賢明な方法で処理する必要があるでしょう。多分それは正しいことをしていない、そしてあなたは修正するサーバーコンポーネントにバグを持っています。 :-)
アプリケーションのクラッシュを解決するには、2つの方法があります。
まず、このエラーを処理して、アプリケーションがクラッシュしないようにします。例として、resultText
コントロールにエラーに関する詳細を入力するだけです。リクエストの処理内容やレスポンスの詳細については詳しく説明していないため、今すぐ説明できる堅牢なエラー処理はそれほど多くありません。ネットワーク呼び出しは常に機能するとは限らないため、以下の2番目のポイントに対処しても、エラー処理が必要になることに注意してください。
private async void buttonStringGet_Click_1(object sender, RoutedEventArgs e)
{
JsonWebAsync.JsonWebClient client = new JsonWebAsync.JsonWebClient();
string result;
try
{
var resp = await client.DoRequestAsync("myurl");
result = resp.ReadToEnd();
}
catch (WebException ex)
{
// generic error handling
result = string.Format("Could not get data. {0}", ex);
}
resultText.Text = result;
}
次に、そもそもエラーを回避しようとしましょう。クライアントが送信するリクエストが理にかなっていることを確認しましょう。インストルメンテーションコードを追加して、「myurl」の代わりに使用されるものが適切であることを確認できます。
private async void buttonStringGet_Click_1(object sender, RoutedEventArgs e)
{
JsonWebAsync.JsonWebClient client = new JsonWebAsync.JsonWebClient();
string requestUrl = ComputeRequestUrl(); // I assume this code exists somewhere.
System.Diagnostics.Debug.WriteLine("Sending request for {0}", requestUrl);
var resp = await client.DoRequestAsync(requestUrl);
string result = resp.ReadToEnd();
resultText.Text = result;
}
これで、デバッガーをアタッチしてデバッグビルドを実行すると、デバッグストリームを選択すると、Visual Studioの[出力]ウィンドウにトレース出力が表示されるはずです。