2012-04-19 2 views
0

나는 비교적 새로운 개발자이지만 여러 XML 파일을 집계하는 응용 프로그램을 만들고 있습니다. 특정 컨트롤러의 경우 원격 REST 기반 서비스에 약 25 건의 호출이 이루어지며 모든 호출을 완료하고 데이터를 구문 분석하고 뷰를 반환하는 데 약 5-7 초가 소요됩니다. 나는 30 분 동안 컨트롤러의 결과를 캐싱하고있다.애플리케이션 타이머를 기반으로 서버에서 메소드를 실행하는 방법은 무엇입니까?

내가 피하고 싶은 것은 사용자가 캐시가 만료 될 때까지 7 초를 기다려야한다는 것입니다. 그래서, 제 생각은 매 30 분마다 XML 파일을 하나의 로컬 파일로 집계하여 쿼리 할 수있는 메서드를 실행하는 것입니다. 따라서 컨트롤러는 더 이상 서비스를 직접 호출하지 않고 저장된 파일을 호출합니다.

IIS에 원격으로 액세스 할 수 있으므로 이러한 방식으로 작업을 설정할 수 없습니다. 그것은 응용 프로그램 계층 솔루션이어야합니다. 제안?

답변

3

예약 서비스 인 Quartz.NET을 사용할 수 있습니다. 임베디드 모드 (IIS 응용 프로그램 풀의 프로세스에서 실행, 응용 프로그램과 함께 배포하기 쉬운 모드) 또는 독립 실행 형 서비스로 실행할 수 있습니다. 응용 프로그램 풀이 자주 사용되거나 (기본적으로 29 시간마다, 특정 유휴 시간이 지나서 또는 서버가 재부팅 된 경우 또는 여러 이벤트 발생시) 중요하므로 여야합니다. 수동으로 사이트에 액세스하여 자동 시작을하지 않는 한 앱 풀이 회전합니다.

Windows 작업 스케줄러를 고려해 볼 수도 있습니다.

0

좋은 디자인은 아니지만 xml 파일을 Windows 서비스별로 로컬 폴더에 만들 수 있으며 asp.net mvc 응용 프로그램은 Windows 서비스에서 작성한 xml 파일에 액세스 할 수 있습니다.

1

이론적으로 Global.asax에서 비동기 적으로 데이터를 가져 와서 ASP.NET 캐시에 넣을 수있는 두 개의 스레드를 시작할 수 있습니다. 생성 한 스레드가 ASP.NET 용 스레드 풀에서 튀어 나오지 않도록하십시오. 작업 상태를 LongRunning으로 설정하여 TPL을 사용하여 작업을 수행 할 수 있어야합니다.

0

서버에서 실행되며 업데이트를 처리하는 Windows 서비스 (웹 서비스 아님)를 만드는 것이 좋습니다. 컨트롤러가 호출 할 데이터베이스에 사후 처리 된 데이터를 저장할 수 있습니다. 이렇게하면 웹 응용 프로그램과 데이터 구문 분석 작업이 분리되어 서비스에서 타이머를 사용하고 웹 응용 프로그램을보다 깨끗하게 유지할 수 있습니다.

관련 문제