2011-02-08 4 views
14

ASP.Net MVC를 사용하여 첫 번째 웹 응용 프로그램을 개발하고 있으며 백그라운드 서비스가 stackoverflow의 평판/배지 시스템과 달리 응용 프로그램 외부에서 상태 알림을 처리하기를 원합니다.공유 호스팅 환경에서 ASP.Net MVC 웹 사이트의 백그라운드 처리를 구현하는 방법은 무엇입니까?

이렇게 처리하는 가장 좋은 방법은 무엇입니까? 내가 사용하고있는 Godaddy와 같은 공유 호스팅 환경에서도 가능합니까?

열을 "처리되지 않은"상태로 설정 한 데이터베이스 테이블에 알림 레코드를 추가하므로 백그라운드 작업자와 직접 통신 할 필요가 없습니다. 그러면 작업자는 정기적으로 테이블을 스캔하여 준비가 된 작업을 처리합니다.

귀하의 조언에 감사드립니다.

+0

배경 직업에 대해 더 자세히 알려주시겠습니까? 오래 걸리나요? 그것은 CPU 집약적입니까? 요청과 함께 실행할 수없는 주된 이유는 무엇입니까? –

+0

물론입니다. 백그라운드 작업은 Paypal에서 비동기 적으로 들어오는 지불 상태 알림을 처리합니다. 상태에 따라 작업은 다른 데이터베이스 작업을 수행합니다. 너무 집중적 인 것은 아니며 현재는 응용 프로그램 내에서 처리합니다. 그러나 수령 당시 테이블에 정보를 기록하고 배경 작업자가 처리하도록하는 것이 더 나은 디자인 인 것으로 보였습니다. – JimDaniel

답변

7

quartz.net을 사용해 보셨나요? 나는 그것이 당신의 필요에 맞을 것이라고 생각합니다.

+0

좋아요. global.asax에서 쿼츠 작업을 실행하면 웹 사이트가 실행되는 동안 실행됩니다. 그게 내가 원하는 것일테니까. – JimDaniel

+0

예! 당신은 application_start에 그것을 설정했다. – uvita

+0

불행히도 Godaddy는 IIS에 중간 신뢰를 적용합니다. 이것은 석영의 사용을 제한합니다 – Luther

3

GoDaddy가 별도의 서비스를 지원하는지 여부를 묻는 질문에 대답하십시오.

그러나 공유 호스팅에서이 문제를 "해결할 수있는"창의적인 방법이 많이 있습니다.

  1. 배경 작업을 실행하는 것이 안전 페이지입니다. 일정한 간격으로이 웹 페이지를 호출하는 제어하에있는 컴퓨터에서 예약 된 작업을 수행 할 수 있습니다.
  2. @safi의 백그라운드 워커 스레드 응답의 변형을 사용하십시오. 백그라운드 작업자 스레드는 다른 프로세스가 이미 처리되고 중지되었는지 확인하여 한 번에 하나의 인스턴스 만 실행되도록 할 수 있습니다.
+0

# 1은 내가 원하는 것입니다. DiscountASP와 같은 일부 호스팅 제공 업체는 서버가 미리 정의 된 간격으로 폴링하는 URL을 지정할 수 있습니다. 기본적으로 # 1을 구현할 수 있습니다. –

+0

# 1의 변형은 안전하고 가벼운 REST 서비스가됩니다. 클라이언트에 의해 호출되는 간단한'JsonResult' 메쏘드 일 수도 있습니다 (때때로 호출합니다). 근본적으로 똑같은 아이디어가 조금 더 우아한 방식으로 이루어졌습니다. – rsenna

5

도이 Simulate a Windows Service using ASP.NET to run scheduled jobs 문서를 참조하십시오.

바깥 쪽 종속성없이 작업을 예약하는 좋은 방법을 설명합니다.

캐시 시간 초과를 사용하여 일정을 제어하는 ​​것이 좋습니다. 정기적 인 임시 파일 정리가 필요한 프로젝트에서 성공적으로 구현했습니다. 이 정리 작업은 약간 무거워서 예약 된 작업이나 사용자 정의 프로그램을 배포 할 필요가 없도록 예약 된 작업 (asp.net 캐시 사용)에서이 깨끗한 작업을 이동합니다.

+0

뛰어난 기술! StackOverflow.com에서 실제로 사용 된 것 같습니다. 참조 : http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/. – Jonathan

1

하나의 백그라운드 작업으로 충분하면 WebBackgrounder 을 사용하십시오. 자세한 설명은 article입니다.

관련 문제