none
BCL / HttpClient in Silverlight liest immer die komplette Antwort

    Frage

  • Auf dem Server (WebApi) habe ich eine Action, die einen PushContentStream als Ergebnis liefert.
    Diesen kann ich via HttpClient in einer Kommandozeilenanwendung auch wie gewünscht schrittweise empfangen und auswerten.

    Ich habe schon auf verschiedene Weisen probiert das gleich Verhalten auf im Silverlight zu bekommen; aber der Inhalt der Antwort wird immer komplett gelesen.

    Hat jemand eine Idee?

    var c = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Get, "http://SERVER:PORT/api/CONTROLLER/ACTION");
    
    var res = await c.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
    
    using (var stream = await res.Content.ReadAsStreamAsync())
    {
        var reader = new StreamReader(stream);
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            Debug.WriteLine("{0:G}: {1}", DateTime.Now, line);
        }
    }

    Donnerstag, 6. April 2017 13:18

Antworten

  • Das Problem war weder das Silverlight, noch das verwendete HttpClient-Paket.

    Um den REST-Nachrichten zu verfolgen lasse ich i.d.R. immer Proxy mitlaufen (Fiddler). Dieser war so eingestellt, dass die Antworten vor dem Senden an den Client erst komplett am Proxy angekommen sein müssen; er hat die Antwort vom Server gepuffert und so das Verhalten verursacht.
    Die CMD-Anwendung hat am Proxy vorbei gearbeitet und deswegen funktioniert.

    Donnerstag, 13. April 2017 04:49

Alle Antworten

  • Hallo Enrico,

    was heißt das "wird immer komplett gelesen" genau?

    Wird deine Schleife nur einmal durchlaufen und bei ReadLine wird der gesamte Inhalt gelesen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 6. April 2017 13:29
  • Eigentlich sollte der Aufruf SendAsync "beendet" werden, wenn die Header der Response gelesen wurden.

    Statt dessen wird im Silverlight ebenfalls der Body der Antwort komplett mit gelesen, bevor die Schleife betreten wird.

    Auf dem Server wird die Antwort Stück für Stück erstellt und ich will diese auf dem Client in den gleichen Schritten empfangen und auswerten.
    Freitag, 7. April 2017 06:01
  • Das Problem war weder das Silverlight, noch das verwendete HttpClient-Paket.

    Um den REST-Nachrichten zu verfolgen lasse ich i.d.R. immer Proxy mitlaufen (Fiddler). Dieser war so eingestellt, dass die Antworten vor dem Senden an den Client erst komplett am Proxy angekommen sein müssen; er hat die Antwort vom Server gepuffert und so das Verhalten verursacht.
    Die CMD-Anwendung hat am Proxy vorbei gearbeitet und deswegen funktioniert.

    Donnerstag, 13. April 2017 04:49