2016-08-04 70 views
0

我試圖每10秒對Web api url執行連續請求以記錄返回數據中的更改。該代碼片段看起來是這樣的:在調試時獲取HttpWebResponse的內容

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(); 
} 

每一個現在,然後運行該消息說,XML文檔格式化嚴重的deserialiation時,則會引發InvalidOperationException。爲了解決問題,我嘗試使用autos/locals/watch視圖在調試模式下找到「原始」響應內容,但我確實找不到它。

我可以找到響應頭和很多其他信息,據我所見,這看起來沒問題,只有一個例外;顯示-1的內容長度。我不確定這是否是我應該關心的事情,但由於我無法找到響應「身體」,我不禁懷疑它。

所以我真正的問題在於:我如何找到HttpWebResponseStream對象內的「body」?

而側面的問題:內容長度是否值-1是值得關注的。

+0

你可以發佈你的XML字符串? – 2016-08-04 12:33:55

+0

你好,我運行我的POC反對這個YQL URL: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 = store%3A%2F%2Fdatatables.org%2Falltableswithkeys這是響應的預期格式和內容,但發生異常時的實際響應看起來是未知的,這是我希望能夠在調試模式下找到的。 – Anders

+0

響應流用於輸出,爲什麼你使用它來輸入? – Jonny

回答

1

如果從流讀取的全部內容,並反序列化之前將其存儲在一個變量,你應該能夠看到的內容,但調試

0

對於調試,我建議你將響應複製到字符串中,並以這種方式觀看它。

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 
} 

我也建議刪除: objStream.Flush(); objStream.Close();

當使用'using'語句時,它會調用Dispose()(IDisposable()),它會自動關閉流。