2009-03-23 3 views
1

시나리오 : WCF 서비스는 클라이언트로부터 XDocument를 받아 처리하고 MS SQL 테이블에 행을 삽입합니다.공유 호스팅에서 IIS/WCF에서 스레드/프로세스를 실행하는 최선의 방법

여러 클라이언트가 동시에 WCF 서비스를 호출 할 수 있습니다. 전화는 일반적으로 오래 걸리지 않습니다 (몇 초).

뭔가가 SQL 테이블을 폴링하고 비동기식으로 다른 프로세스 집합을 실행해야합니다. 두 번째 프로세스는 어떤 식 으로든 콜백 할 필요가 없으며 WCF와 관련이 없습니다. 테이블을 읽고 일련의 메소드를 수행하고 웹 서비스 호출 (물론 레코드가있는 경우)을 수행하면됩니다.하지만 그게 전부입니다. 위에서 언급 한 서비스를 사용하는 WCF 서비스 클라이언트는이 사실을 모르고 그것에 대해 신경 쓰지 않습니다.

this question in StackOverflow에 대해 읽었으며 Windows 서비스가 이상적이지만이 WCF 서비스는 공유 호스팅 (discountasp 또는 유사)에서 호스팅되므로 Windows 서비스를 설치하는 것이 옵션이되지 않음을 알고 있습니다. (내가 아는 한).

아키텍처가 고정되어 있다고 가정하면 (I.E. : 테이블을 변경할 수없고, 레거시 형식에서 가져 오거나 WCF 서비스의 메커니즘을 변경하지 않습니다.)이 테이블을 폴링/처리 할 제안은 무엇입니까?

10 분마다 확인해야한다고 말하고 싶습니다. 그것은 즉시 일 필요가 없습니다.

감사합니다.

+0

공유 호스팅 환경에서 이와 같은 것들에 대해 궁금해했습니다. 좋은 질문입니다! –

+0

해결책은 blowdart가 제안한 것 같다.대부분의 공유 호스팅을 사용하면 X 분마다 특정 URL을 "시작"할 수 있습니다. –

답변

3

속임수. 이 프로세스를 다른 WCF 서비스로 노출시키고 예정된 시간에 사용자가 제어 할 수있는 상자에서 go 명령을 실행하십시오.

WCF에서 백그라운드 스레드를 실행하거나 가난한 사람의 스케줄러로 캐시 만료를 사용할 수는 있지만, 웹 사이트의 다음 히트와 앱 풀이 다시 돌아올 때까지 앱 풀이 재생 될 때 중지됩니다. 적어도 제어하는 ​​시스템에서 요청을 실행하면 요청한 방향으로 요청을 보냈기 때문에 앱 풀이 10 분마다 다시 가동된다는 것을 알 수 있습니다.

+0

약간의 수치를 읽고 난 후,이 아이디어가 이상하지 않다면 생각하고있었습니다 ... WCF를 드러내고 작은 앱을 가지고 있으면 프로세스가 자동으로 실행됩니다 : S 나는 그것이 "미친" –

1

웹 응용 프로그램은 일정한 간격으로 무언가를 실행하는 데 전혀 적합하지 않습니다. 요청이 들어오지 않으면 응용 프로그램에 코드가 실행되지 않고 잠시 동안 응용 프로그램이 비활성 상태 인 경우 IIS는 다음 요청이 들어올 때까지 IIS를 완전히 종료 할 수 있습니다.

일부 응용 프로그램의 경우 특정 간격으로 실행되는 것이 중요하지 않으며 최근에 실행 된 것입니다. 이것이 응용 프로그램의 경우라면, 테이블이 마지막으로 폴링 된시기를 추적 할 수 있으며, 모든 요청에 ​​대해 테이블이 다시 폴링되기에 충분한 시간이 경과했는지 점검 할 수 있습니다.

데이터베이스를 관리 할 수있는 권한이 있으면 SQL Server에 스케줄러가 있습니다. 권한이있는 경우 쿼리, 저장 프로 시저 및 시작 프로세스를 실행할 수 있습니다 (공유 호스팅에서는 거의 불가능 함).

특정 간격으로 코드가 필요하며 서버에 액세스하여 일정을 예약하거나 서비스로 실행할 수 없거나 SQL Server 스케줄러를 사용할 수없는 경우 간단하게 처리 할 수 ​​없습니다.

0

"항상 활성"인 응용 프로그램 풀을 만들고 스레드로 원하는 모든 작업을 수행하십시오.

관련 문제