2012-04-04 6 views
3

Ich entwickle eine Anwendung für Windows 8 (Consumer Preview) in C#. Es führt einfache REST-Aufrufe an die Last.fm-API aus.Ausnahme in HttpResponseMessage für asynchrone POST-Methode in. NET4.5

Es gibt diese Ausnahme, die mich seit vielen Tagen belästigt. Ich versuche, einen POST-Aufruf an eine Last.fm-API-Methode zu senden. Aber immer, wenn ich einen Anruf senden, erhalte ich die folgende mssg -

„Eine Ausnahme vom Typ‚System.Net.Http.HttpRequestException‘ist in mscorlib.dll aufgetreten, wurde aber im Benutzercode nicht behandelt“. Zusätzliche Informationen: Beim Senden der Anfrage ist ein Fehler aufgetreten.

Wenn ich die Ausnahme heißt es auszudrucken -

System.Net.Http.HttpRequestException: Fehler beim Senden der Anforderung. ---> System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet geschlossen.

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

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

My GET Anrufe an die Authentifizierungs-API des letzten. fm geht es gut.

Ich füge einen Code-Schnipsel:

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

} 

Bitte lassen Sie mich wissen, ob ein Stack-Trace notwendig wäre.

-Sagar

Antwort

2

Ich denke, ich habe es herausgefunden. Ich behalte den Posten für andere, um zu verweisen.

Der Fall war, dass Last.fm-Server Expect: 100Continue im Header-Feld nicht akzeptieren. Also musste ich es explizit auf false setzen.

hatte Also folgendes hinzuzufügen:

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

Thank you !! Ich habe seit Tagen um dieses Problem gekämpft und konnte nirgendwo eine Lösung finden. Du hast meinen Tag gerettet. –