3

C#でWindows 8(コンシューマープレビュー)用のアプリケーションを開発しています。Last.fmAPIへの単純なREST呼び出しを行います。

何日も前から私を悩ませているこの例外があります。Last.fmAPIメソッドにPOST呼び出しを送信しようとしています。しかし、電話をかけるたびに、次のmssgが表示されます-

「タイプ'System.Net.Http.HttpRequestException'の例外がmscorlib.dllで発生しましたが、ユーザーコードで処理されませんでした」。追加情報:リクエストの送信中にエラーが発生しました。

例外を印刷すると、次のように表示されます-

System.Net.Http.HttpRequestException:リクエストの送信中にエラーが発生しました。---> System.Net.WebException:基になる接続が閉じられました:接続が予期せず閉じられました。

System.Net.HttpWebRequest.EndGeetResponse(IAsyncResult asyncResult)で

System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)で

last.fmの認証APIへのGET呼び出しは正常に機能しています。

コードスニペットを添付しています:

private async void Collection_Click_1(object sender, RoutedEventArgs e)
{
    /* .
       .
       .
    */

HttpClient Cli = new HttpClient();
string track_updateNowPlaying = "method=track.updateNowPlaying&track=" + id3.Title + "&artist=" +id3.Artist + "&album=" + id3.Album + "&api_key=" + lfm_api_key + "&api_sig=" + updtrack_sig + "&sk=" + Globalv.session_key;

HttpContent tunp =new StringContent(track_updateNowPlaying);

try
{
    //getting exception in the following line
    HttpResponseMessage upd_now_playing = await cli.PostAsync(new Uri("http://ws.audioscrobbler.com/2.0/", UriKind.RelativeOrAbsolute), tunp);

}
catch(Exception ex) {textblock.text = ex.ToString();}
}

private async void LoginBtn_Click_1(object sender, RoutedEventArgs e) //this function is called before collection_click_1 function
{
    /* .
       .
       .
    */
HttpClient cli = new HttpClient();
string auth_request = "http://ws.audioscrobbler.com/2.0/?method=auth.getMobileSession&username=" + UsernameTBx.Text + "&authToken=" + lfm_authToken + "&api_key=" + lfm_api_key + "&api_sig=" + lfm_api_sig;

HttpResponseMessage auth = await cli.GetAsync(auth_request); //this works fine...

}

スタックトレースが必要かどうか教えてください。

-サーガル

4

1 に答える 1

2

私はそれを理解したと思います。他の人が参照できるように投稿を続けています。

この場合、Last.fmサーバーはヘッダーフィールドでExpect:100Continueを受け入れません。そのため、明示的にfalseに変更する必要がありました。

したがって、以下を追加する必要がありました。

HttpClient cli = new HttpClient();
cli.DefaultRequestHeaders.ExpectContinue = false; 
于 2012-04-06T09:00:39.477 に答える