2012-04-04 3 views
3

C#의 Windows 8 (소비자 미리보기) 용 응용 프로그램을 개발 중입니다. Last.fm API에 대한 간단한 REST 호출을 만듭니다..NET4.5의 비동기 POST 메서드에 대한 HttpResponseMessage의 예외

며칠 동안 나를 괴롭히는이 예외가 있습니다. Last.fm API 메서드에 POST 호출을 보내려고합니다.

는 "유형 'System.Net.Http.HttpRequestException'의 예외가 mscorlib.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다"- 내가 전화를 보낼 때마다, 나는 다음과 같은 mssg를 얻을. 추가 정보 : 요청을 보내는 중 오류가 발생했습니다.

나는 그것이라고 예외를 인쇄하는 경우

-

System.Net.Http.HttpRequestException는 : 요청을 보내는 동안 오류가 발생했습니다. ---> System.Net.WebException : 기본 연결이 닫혔습니다 : 예기치 않게 연결이 닫혔습니다.

System.Net.HttpWebRequest.EndGeetResponse (IAsyncResult를 asyncResult) System.Net.Http.HttpClientHandler.GetResponseCallback에서

(IAsyncResult를 아칸소) 마지막의 인증 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

감사합니다! 며칠 동안이 문제를 해결하기 위해 애 쓰고 있었고 어느 ​​곳에서나 솔루션을 찾을 수 없었습니다. 너는 내 하루를 구했다. –

관련 문제