2016-08-04 71 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()),它会自动关闭流。