2008-09-25 3 views
1

REST를 사용하여 값을 검색하려면 외부 업체에 연락해야하지만 10ms 내에 응답을받지 못하면 기본값을 사용하고 계속 진행하려고합니다 처리.서버 측 웹 요청에 엄격한 제한 정책 적용

비동기 WebRequest를 사용하는쪽으로 향하고 있지만 동기 요청을 사용하여 트릭을 수행했는지 궁금합니다.

어떤 조언이 필요합니까?

+0

웹 요청과 관련하여 10ms * really *는 그렇게 길지 않습니다. 이론 캐싱이 도움이 될지라도 기본 설정을 사용하는 것이 더 자주 있습니다. 일반적으로이 질문은 단순히 타임 아웃과 비동기로 작업하는 것에 불과합니다. – thecoshman

답변

2

요청을 보내고 돌아 오기를 기다리는 경우 동기 상태라고 말하고 싶습니다. 아무 것도하지 않거나 기다리는 동안 응답하지 않는 경우 비동기 요청을 수행 할 이유가 없습니다. 당신은 시간 제한 자신을 확인해야합니다, 더 내장 없다 -

가 당신은 Request 오브젝트에 대해 중단()를 호출해야합니다

가 :

WebRequest request = WebRequest.Create("http://something.somewhere/url"); 
WebResponse response = null; 
request.Timeout = 10000; // 10 second timeout 
try 
{ 
    response = request.GetResponse(); 
} 
catch(WebException e) 
{ 
    if(e.Status == WebExceptionStatus.Timeout) 
    { 
    //something 
    } 
} 

만약 일을 비동기 : 동기화 호출에 대한

힘든 시간 초과를 시행하는 방법.

+0

콜백을 기다리는 동안 비동기식으로 CPU가 안정되게하지 않겠습니까? 아마도 그렇지는 않지만 내가 쓰는 서비스로했던 것입니다. 30 초마다 웹 사이트를 호출하지만 비동기 적으로 수행합니다. 마지막 요청이 완료되기 전에 30 초가 지나면 잠자기 모드로 돌아갑니다. –

+0

적어도 .NET 웹 서비스를 사용하면 어쨌든 동기식 호출은 실제로 비동기식입니다. – MusiGenesis

0

WebService의 제 3 자 호출을 캡슐화 할 수 있습니다. 그런 다음 응용 프로그램에서이 WebService를 동 기적으로 호출 할 수 있습니다. 웹 서비스 참조에는 10 초 또는 기타로 설정할 수있는 간단한 시간 초과 속성이 있습니다.

WebService에서 타사 데이터를 가져 오기 위해 호출하면 제한 시간이 경과 한 후 WebException이 throw됩니다. 그것을 잡아서 대신 기본값을 사용하십시오.

편집 : 위의 필립 응답이 좋습니다. RIF.