2013-01-17 2 views
3

MVC WebApi 서버에서 데이터를 가져와야하는 Windows RT 애플리케이션을 개발 중입니다. 문제는 응답이 몇 초에서 3 분이 걸릴 수 있다는 것입니다.시간이 너무 오래 걸리는 웹 서비스 호출을 해결하는 방법은 무엇입니까?

해결 방법은 무엇입니까?

현재로서는 웹 API에 async를 호출하고 예외를 피하기 위해 긴 시간 제한 값을 지정합니다. 좋은 방법입니까? 서버가 항상 열려있는 연결을 가지고 있기 때문에 나는별로 좋아하지 않습니다. 서버 성능에 크게 영향을 미칠 수 있습니까?

"콜백"과 같은 것이 있습니까? 웹 서비스의 경우 있습니까? 서버가 클라이언트에게 데이터를 보내도록 호출한다는 의미입니다.

+0

3 분 - 와우, 서버는 무엇을합니까? 어쨌든 서버를 작성하는 경우 웹 서비스 호출을 사용하여 계산을 해제 한 다음 결과를 준비 할 때까지 반복적으로 폴링 할 수 있습니다. 단순히 타임 아웃을 올리는 것이 유효한 접근 일 수도 있습니다. –

답변

3

예, 서버를 콜백 클라이언트 (예 : WCF 이중 통신)로 가져 오는 방법이 있습니다. 그러나 그러한 기술은 대개 연결을 열어 놓을 것입니다 (대부분의 경우 TCP 세션입니다). 대부분의 웹 서버는 수많은 동시 요청을 지원하지 않으므로 서버에 대한 각각의 연장 된 호출은 동시에 연결된 클라이언트 수를 증가시킵니다. 이로 인해 리소스 사용량이 많이 발생하지 않아야합니다. 클라이언트가 많은 경우 이러한 아키텍처는 실패 할 수밖에 없습니다.

REST 요청은 가볍고 작고 빠릅니다. 데이터베이스를 사용하여 임시 결과 및 작업자 서버를 저장하여로드를 처리하는 것이 좋습니다. 이것은 클라이언트 쪽이 아니라 서버 쪽 문제입니다.

+0

좋은 의견 ... 서버 쪽 작업을 더 빨리 수행 할 수없는 경우, 다른 방법은 요청한 작업에 대한 "토큰"을 반환하고 클라이언트가 완료를 위해 폴링하도록하는 것입니다. 최적은 아니지만 연결을 유지하는 것보다 낫습니다. 그래도 서버 측 정리를 관리해야합니다. –

3

마지막으로 WebSockets (감사합니다 oleksii)를 사용하여 해결했습니다. 그것은 연결을 열어 두지 만 반복적으로 결과를 폴링하는 것을 피합니다. 이제 서버가 프로세스를 완료하면 데이터를 클라이언트로 직접 보냅니다. WebSockets는 TCP를 통해 중계되고 표준화 된 프로토콜입니다.

http://en.wikipedia.org/wiki/WebSocket

관련 문제