Windows Phone 7/8 で Web サービスにアクセスするのは初めてです。WebClient を使用して、php Web サイトから文字列を取得しています。サイトは JSON 文字列を返しますが、現時点では、接続が機能するかどうかをテストするために、通常の文字列として TextBox に入れようとしています。
php-page には認証が必要ですが、それが私のコードが失敗していると思います。これが私のコードです:
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("myUsername", "myPassword");
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(new Uri("https://www.mywebsite.com/ba/php/jsonstuff.php"));
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try
{
string data = e.Result;
this.jsonText.Text = data;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
これは、最初に WebException を返し、次に TargetInvocationException を返します。Uri をたとえば「http://www.google.com/index.html」に置き換えると、jsonText TextBox に Google からの html テキストが入力されます (奇妙なことに、これは WebClient 資格情報がまだ設定されている場合でも機能します)。
クレデンシャルの設定に問題がありますか?認証情報を使用してphpページにアクセスする方法に関するガイドを検索しても、良い結果は見つかりませんでした。その後、どこかで WebClient.Credentials プロパティを使用するための短い言及を見つけました。しかし、それは他の方法で機能する必要がありますか?
更新: WebException から取得できるものは次のとおりです (書式設定が不適切で申し訳ありません)。
System.Net.WebException: リモート サーバーがエラーを返しました: NotFound. --->System.Net.WebException: リモート サーバーがエラーを返しました: NotFound。System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) で System.Net.Browser.ClientHttpWebRequest.<>c_ DisplayClasse.b _d(Object sendState) で System.Net.Browser.AsyncHelper.<>c_ DisplayClass1.b _0 (Object sendState) --- 内部例外スタック トレースの終了 --- System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System. System.Net.WebClient での Net.WebClient.GetWebResponse (WebRequest 要求、IAsyncResult 結果)。
更新 2:エラー ログの行は次のとおりです。
11 月 16 日 17:51:12 myservice httpd[21036]: 127.0.0.1 - - [16/11 月/2012:17:51:12 +0200] "GET /ba/php/jsonstuff.php?origpath=/ba/php /jsonstuff.php HTTP/1.1" 401 290 "-" "Mozilla/5.0 (互換; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"
401は、偽の資格情報を示唆していると思いますか?