2016-08-04 14 views
0

Ich versuche, alle 10 Sekunden sequenzielle Anfragen an eine Web-API-URL zu senden, um Änderungen in den zurückgegebenen Daten zu protokollieren. Das Code-Snippet sieht wie folgt aus:Inhalt von HttpWebResponse während des Debuggens abrufen

using (Stream objStream = response.GetResponseStream()) 
{ 
    query result = (query)serializer.Deserialize(objStream); 
    Console.WriteLine(result.results.quote.Name + " " + result.results.quote.Ask); 
    objStream.Flush(); 
    objStream.Close(); 
} 

Hie und da eine InvalidOperationException ausgelöst wird, wenn die deserialiation mit der Meldung ausgeführt wird sagen, dass das XML-Dokument ist schlecht formatiert. Um das Problem zu isolieren, versuche ich den "rohen" Response-Inhalt im Debug-Modus zu finden, indem ich die Autos/Locals/Watch-Ansicht benutze, aber ich kann sie wirklich nicht finden.

Ich kann die Antwort-Header und eine Menge anderer Informationen finden und soweit ich das in Ordnung aussieht, mit einer Ausnahme sehen; die Inhaltslänge, die -1 zeigt. Ich bin mir nicht sicher, ob das etwas ist, worüber ich mich wirklich kümmern sollte, aber da ich die Antwort "Körper" nicht finden kann, kann ich nichts dagegen haben, misstrauisch zu sein.

Also meine eigentliche Frage hier ist: wie kann ich den "Körper" innerhalb eines HttpWebResponse oder Stream Objekts finden?

Und die Seite Frage: Ist der Inhalt Länge mit dem Wert -1 etwas belästigt werden.

+0

Könnten Sie Ihren XML-String schreiben? –

+0

Hallo, ich meine poc gegen diese YQL URL ausführen: https://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20Ask%20from%20yahoo.finance.quotes%20where%20symbol% 20in% 20 (% 22MSFT% 22) & diagnostics = true & env = speichern% 3A% 2F% 2Fdatatables.org% 2Falltableswithkeys Dies ist das erwartete Format und der Inhalt der Antwort, aber wie die tatsächliche Antwort aussieht, wenn die Ausnahme auftritt, ist unbekannt das möchte ich im Debug-Modus herausfinden können. – Anders

+0

Der Antwortstream ist für die Ausgabe, warum verwenden Sie ihn für die Eingabe? – Jonny

Antwort

1

Wenn Sie den gesamten Inhalt aus dem Stream lesen und speichern sie in einer Variablen vor Deserialisieren sie sollten Sie in der Lage sein, den Inhalt zu sehen, während

Debuggen
0

Zum Debuggen würde ich vorschlagen, dass Sie die Antwort in String replizieren und auf diese Weise beobachten Sie es.

using (Stream objStream = response.GetResponseStream()) 
{ 
    StreamReader sr = new StreamReader(objStream); 

    string response = sr.ReadToEnd(); 
    objStream.Seek(0,SeekOrigin.Begin); // Get the pointer back to the begining.     

    query result = (query)serializer.Deserialize(objStream); 
    Console.WriteLine(result.results.quote.Name + " " + result.results.quote.Ask); 
    objStream.Flush(); // remove 
    objStream.Close();//remove 
} 

ich auch entfernen würde empfehlen:() objStream.Flush; objStream.Close();

, wenn 'mit' Anweisung ruft Dispose() (IDisposable()), die eventauly den Strom von selbst schließt.

Verwandte Themen