2012-04-04 21 views
3

C#でWindows 8(Consumer Preview)用のアプリケーションを開発しています。これは、Last.fm APIに対する単純なREST呼び出しを行います。.NET4.5の非同期POSTメソッドのHttpResponseMessageの例外

ここ数日から私を悩ませているこの例外があります。 Last.fm APIメソッドにPOST呼び出しを送信しようとしています。しかし、私はコールを送信するたびに、私は次のようMSSG取得 -

を「型 『System.Net.Http.HttpRequestException』の例外ががmscorlib.dllで発生したが、ユーザーコードで処理されませんでした」。 追加情報:要求の送信中にエラーが発生しました。

私はそれを言う例外プリントアウトした場合 -

System.Net.Http.HttpRequestException:リクエストを送信中にエラーが発生しました。 ---> System.Net.WebException:基になる接続が閉じられました:接続が突然閉じられました。 System.Net.Http.HttpClientHandler.GetResponseCallback(たIAsyncResultのAR)でSystem.Net.HttpWebRequest.EndGeetResponse(たIAsyncResult asyncResult)

最後の認証APIへ

マイGETコール。 fmは正常に動作しています。

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

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... 

} 

スタックトレースが必要となる場合は私に知らせてください。

- サガ

答えて

2

私はそれを理解したと思います。私は他の人のために投稿を参照しています。

Last.fmサーバーがヘッダーフィールドにExpect:100Continueを受け入れないケースがありました。だから私は明示的にfalseに変更しなければならなかった。

だから、次を追加する必要がありました:

HttpClient cli = new HttpClient(); 
cli.DefaultRequestHeaders.ExpectContinue = false; 
+0

ありがとうございました!!私はこの問題を数日間解決するために苦労しており、どこでも解決策を見つけることができませんでした。あなたは私の一日を救った。 –

関連する問題