2012-05-14 5 views
2

WebRequest에 가까운 무한 제한 시간 값을 설정하려고합니다. 쿼리중인 HTTP 기반 API가 시간 초과를 이미 선언 한 XML 문서를 다시 보내서 이미 시간 초과를 처리하고 있다는 것을 고려합니다.WebRequest.GetResponse가 시간 제한 값을 무시합니까?

Dim request As WebRequest = WebRequest.Create("http://api/cgi-bin/do?cmd=longRunningOperation&timeout=300") 
'^command returns timeout if not complete within 300 seconds (5 minutes) 

request.Timeout = Integer.MaxValue ' so we don't need client-side timeout handling 

Dim response As WebResponse = request.GetResponse() ' yet this call blows up 

내가 디버깅 할 수있는 무언가를 제공 할 수 없습니다 죄송하지만, MSDN에 따르면,이 같은 방법으로 할 수 있습니다 :하지만 어떤 이유로 들어, 다음 코드는 여전히 예외가 발생합니다. 그러나 약 100 초 후에도 WebException이 발생합니다 (메시지 : The operation has timed out, 상태 : WebExceptionStatus.Timeout).

누군가가이 동작을 설명 할 수 있습니까? (그렇지 않은 경우, 해결 방법을 제안?)

편집

문제는 아마이 조각은 Task에서 실행되지만, 지금까지 그게 내가 아는 아직 사실 함께 할 수있는 뭔가가. UI 스레드에서 코드를 실행

EDIT2은

여전히 좋은 수면 후 ... 그래서 아마 그 결국 그것을 아니라,

EDIT3

을 같은 예외가 발생합니다 , 나는 내 응답이나 응답 스트림을 제대로 닫지 않기 때문에이 작업을 수행 할 수 있다고 생각합니다. 장기 실행 작업이 여전히 바쁜 동안 여러 요청을 보냅니다. 당신이 여기서 제대로 처리하지 않으면 저수준에 잡았다 고 상상할 수 있습니다. 하지만 웹 응답/웹 응답 클래스의 내부 동작을 알지 못하기 때문에 말하기가 어렵습니다.

내가 사용하고 코드 :

문제가있는 방법은 GetResults(command)입니다 http://code.google.com/p/dune-api-codepack/source/browse/ApiWrappers/DuneCommands/CommandResult.vb을 (하지 최신 커밋하지만 차이가 너무 큰되지 않습니다). GetResultsAsync 메소드에 신경 쓰지 마라. 단지 초안 일 뿐이다. 내가 말한

EDIT4

무시의 모든 문제와 해결책은 내 대답은 아래에 있습니다.

+1

나를 위해 잘 작동합니다. 'Thread.Sleep'을 임의의 초 동안 호출하는 가짜 페이지'LongRunning.aspx'를 만들었습니다. 페이지가 150 초 동안 대기하고'request.Timeout'이 없으면, 당신이 참조하는 에러 메세지를 얻습니다. (디폴트 타임 아웃은 100 초이므로). 그러나, 내가 당신의 코드를 사용하고'request.Timeout = Integer.MaxValue'을 설정할 때, 그것은 잘 작동하여, 150 초를 기다린 후에 요청을 완료합니다. [** Fiddler **] (http://www.fiddler2.com/fiddler2/)와 같은 프록시를 실행하여 연결이 파이프 라인을 따라 내려가는 또 다른 이유가 있는지 확인할 수 있습니까? – mellamokb

+0

좋아, 나는 오래된 구식 wireshark를 세울거야. –

+0

요청이 중단되었음을 나타 내기 위해 서버에서 보낸 것이 아무것도 없습니다. 어떤 것이 맞습니까? 결코 실제로 작업을 중단하지 않습니다. 쿼리 매개 변수로 정의 된대로 명령 시간 초과에 도달하지 않은 경우에도 마찬가지입니다. 그럼에도 불구하고 여전히'GetResponse' 호출은 예외를 throw합니다 ... –

답변

0

제게 알아보기위한 @mellamokb에게 특별한 감사의 말을 전합니다. 그러나 해결책은 실제로 아무도 알 수 없었던 것입니다.

요청 시간 초과를 설정하기 전에 요청 데이터에 게시물 데이터를 쓸 수있을 정도로 바보 같았습니다. 나는 그것이 피곤할 때 코드를 작성하려고 시도 할 때 얻는 것이라고 생각합니다.

다시 한번 감사드립니다.