2016-08-04 3 views
0

웹 API url에 대한 순차적 인 요청을 10 초마다 실행하여 반환되는 데이터의 변경 사항을 기록하려고합니다. 코드 조각은 다음과 같습니다디버깅하는 동안 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 뷰를 사용하여 디버그 모드에서 "원시"응답 내용을 찾으려고 시도하지만 실제로 찾을 수 없습니다.

나는 응답 헤더와 많은 다른 정보를 찾을 수 있으며 지금까지 볼 수있는 한 가지 예외가있다. content-length는 -1을 표시합니다. 나는 이것이 정말로 신경 써야하는 것이지 나는 확신 할 수 없다. 그러나 나는 응답 "몸"을 찾을 수 없기 때문에 그것에 대해 의심 스러울 수는 없다.

내 진짜 질문은 여기에 있습니다 : HttpWebResponse 또는 Stream 개체 안에 "몸체"를 어떻게 찾을 수 있습니까?

그리고 부차적 인 질문 : 가치가 -1 인 내용 길이가 귀찮은가?

+0

를 디버깅하는 동안, 당신은 내용을 볼 수 있어야합니다? –

+0

안녕하세요, 저는이 YQL URL에 대해 POC를 실행합니다. https://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20Ask%20from%20yahoo.finance.quotes%20where%20symbol% 20 % 20 (% 22MSFT % 22) & diagnostics = true & env = 스토어 % 3A % 2F % 2Fdatatables.org % 2Falltableswithkeys 응답의 예상 형식 및 내용이지만 예외가 발생했을 때 실제 응답이 무엇인지는 알 수 없으며 그게 내가 디버그 모드에서 찾을 수 있기를 원하는 것입니다. – Anders

+0

응답 스트림은 출력용이며 왜 입력 용으로 사용합니까? – Jonny

답변

1

당신이 스트림의 전체 내용을 읽고 그것을 역 직렬화하기 전에 변수에 저장하는 경우 당신은 당신의 XML 문자열을 게시 할 수

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())를 호출 할 때 스트림이 단독으로 닫힙니다.