2011-02-02 7 views
0

다음과 같은 시나리오가 있으며 가능한 경우 설명이 필요합니다.asp.net의 비동기 웹 요청 httphandler

나는 핸들러 (.ashx) 파일에 대한 ajax 호출을 만드는 javascript 함수를 가지고있다. javascript 함수는 반환 값을 필요로하지 않습니다. 처리기가 일부 데이터를 게시하고 완료됩니다. 핸들러 파일은 ASYNC 웹 요청을 Bitly, Facebook 및 Twitter (순서는 아님)로 만듭니다. 내 아이디어 솔루션은 처리기가 Bitly (bit.ly)에 ASYNC 호출을하고 결과를 얻은 다음 서로 독립적 인 다른 스레드에서 동시에 Twitter 및 Facebook에 게시 할 수 있습니다.

제가 궁금한 점은 WaitHandle입니다. 처리기가 사용자 작업 외부에서 실행 중이거나 콜백 메서드로 충분하기 때문에이 코드를 사용해야합니까? 반환 할 때까지 현재 스레드를 보유 할 호출이 없으면 처리기 파일이 여전히 콜백을 수신 대기합니까? 콜백을 기다리는 스레드를 기다릴 필요가 있다면 원래 스레드가 여전히 대기 중이거나 중단 된 상태로 ASYNC 웹 요청을하는 이점을 여전히 얻고 있습니까?

나는 이것이 일하는 방법을 이해하지만 그걸 모두 정리할 수는 없습니다.

참고 : 핸들은 웹 요청을 가로채는 데 사용되지 않습니다. 나는 핸들러를 사용하여 아약스 게시물을 처리하고있다. 나는 핸들러를 직접 호출하고있다.

답변

0

이 경우 비동기 처리기를 사용하지 않습니다. 결과를 반환하지 않으므로 비동기 처리기를 사용하는 것은 낭비입니다. Aysnc 처리기는 수행중인 작업이 상대적으로 오래 실행되는 상황에서이 작업의 결과를 대기중인 스레드와 결국 브라우저에 대한 응답으로 다시 보내야하는 상황에서 사용합니다.

경우에 따라 보조 프로세스 또는 MSMQ를 사용하여 작업을 완료해야합니다. 간단한 솔루션은 데이터를 테이블에 게시하고 다른 프로세스에서 이러한 레코드를 처리하도록하는 것입니다. MSMQ는 메시지 대기열에 잠시 시간이 걸리므로 이러한 상황에 매우 효과적입니다. 이러한 메시지를 처리하는 프로세스는 ASP.NET 웹 응용 프로그램/사이트에 악영향을 미치지 않으면 서 자신의 달콤한 시간을 가질 수 있습니다. 이렇게 웹 사이트를 확장 할 수 있습니다.

WaitHandle에 대한 질문에 답변하려면 (이 경로를 계속 사용하는 경우), waithandle을 사용해서는 안되며 진정한 비동기 비 차단 처리기로 사용해야합니다. WaitHandle이 차단됩니다.

전체 프로세스 중에 핸들러가 작동한다는 보장은 없습니다. 그 시간 동안 작업자 프로세스를 재설정 할 수 있습니다. 비동기 처리기로 처리하지 않는 더 많은 이유가 있지만 "대역 외"비동기 작업입니다. 대역 외 (Out of band) 란 ASP.NET 응용 프로그램과 동일한 프로세스가 아니라는 의미입니다.

+0

유용한 답장을 보내 주셔서 감사합니다. MSMQ 솔루션에 대해 살펴 보겠습니다. – Raimone