2014-04-29 1 views
0

내 도메인에 특정 날짜/시간에 도달하면 전자 메일을 보낼 것으로 예상되는 이벤트 시스템이 포함되어 있으므로 등록 된 이벤트를 'invoke date' ; 이는 내 이해에 따라 신청 서비스에 대한 우려입니다.MVC/IIS (DDD)의 일정 예약

그러나 응용 프로그램은 상태 저장 구성 요소 ('세션'제외)를 지원하지 않는 IIS에서 MVC 응용 프로그램으로 호스팅되므로이 경우 적절한 해결책이 무엇인지 궁금합니다.

+1

"적절한"이란 무엇입니까? 옵션 3은 매우 심각한 것 같습니다 : "나는 유틸리티 룸에 싱크대가 없으므로 집 전체를 교체 할 것입니다." –

+0

@RobertHarvey 공정하기 위해서는 싱크대가없는 것이 진짜 문제인 것처럼 보입니다. :) 농담이 아니었지만 이제는 그 부분을 제거했습니다. '적절한'해결책으로 생각하는 것이 바람직합니다. 매우 일반적인 경우에 프레임 워크가 제공하는 솔루션입니다. 전체 Windows 서비스를 구현하려면 통신 API, 서비스 처리, 공유 구성 등이 필요합니다. 내가 수행 할 수있는 직접적인 방법이 아닙니다. – Acrotygma

+0

기본 Windows 서비스 구현에는 약 20 http://code.msdn.microsoft.com/windowsdesktop/CSWindowsService-9f2f568e 참조 컨트롤러 메서드 중 하나를 통해 작업을 제출하십시오. 원한다면 REST를 호출 할 수도 있습니다. 간단한 .NET을 사용합니다. MVC 응용 프로그램과 Windows 서비스 간의 연결이 내부 서비스이기 때문에 현재 Windows 서비스에 작업을 제출하도록 원격 처리하고 있습니다. 그러나 WCF는 올바르게 작동합니다. –

답변

0

Revalee 오픈 소스 프로젝트를 사용하면 ASP.NET MVC 프로젝트에서 예약 작업을 수행 할 수 있습니다.

Revalee는 웹 응용 프로그램에 웹 콜백을 예약 할 수있는 서비스입니다. 귀하의 경우 특정 시간에 이메일을 발송하는 콜백 일정을 세울 수 있습니다. Revalee는 자동화 된 전자 메일 메시지를 보내거나 데이터베이스 값을 업데이트하는 것과 같이 개별 트랜잭션 작업 인 작업 (읽기 : 장기간 실행되지 않음)에서 매우 잘 작동합니다. 귀하의 행동을 수행하는 코드는 모두 귀하의 MVC 애플 리케이션 내에 상주합니다.

귀하의 웹 사이트에 등록한 후 27 일 이내에 새로운 사용자에게 이메일 메시지 ("귀하의 평가판 만료가 만료되었습니다"와 같은)을 보내야한다고 가정 해 봅시다.

이 Revalee를 사용하려면, 다음과 같습니다

  1. 서버에 Revalee 서비스, Windows 서비스를 설치합니다. Windows 서비스는 컴파일 할 소스 코드 또는 Revalee website에서 사용할 수있는 미리 컴파일 된 버전으로 제공됩니다.

  2. Visual Studio 프로젝트에서 MVC 관련 Revalee 클라이언트 라이브러리를 사용하십시오. (비 MVC 버전도 있습니다.) 클라이언트 라이브러리는 소스 코드 (다시 컴파일 할 것입니다) 또는 NuGet을 통해 사용할 수있는 미리 컴파일 된 버전으로 사용할 수 있습니다.

  3. 새 웹 사이트 사용자가 ScheduleExpirationMessage() 메서드를 등록 할 때 향후 콜백을 등록합니다 (이 예는 지금부터 27 일 후에 작업해야한다고 가정 함). Revalee 다시 응용 프로그램을 호출하면

    private void ScheduleExpirationMessage(int userId) 
    { 
        DateTimeOffset callbackTime = DateTimeOffset.Now.AddDays(27.0); 
    
        // The callback should be in 27 days from now 
        Uri callbackUrl = new Uri(string.Format("http://mywebapp.com/ScheduledCallback/SendExpirationMessage/{0}", userId)); 
    
        // Register the callback request with the Revalee service 
        RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl); 
    } 
    
  4. 이 앱은 당신이 할 코딩 한 어떤 작업을 수행 할 것입니다. 난이 도움이되기를 바랍니다

    [AllowAnonymous] 
    [CallbackAction] 
    public ActionResult SendExpirationMessage(int userId) 
    { 
        // TODO Lookup the user's information and send the trial expiration message 
        // ... 
        return new EmptyResult(); 
    } 
    

: 같은 ScheduledCallback 컨트롤러, 귀하의 SendExpirationMessage 조치는 (위의 열린 우리당 참조) 보일 수 있습니다.

참고 : 코드 예제는 위의 ScheduleCallback()의 동기 버전을 사용의 Revalee 클라이언트 라이브러리 (LA)도 비동기 호출을 지원합니다

RevaleeRegistrar.ScheduleCallbackAsync(callbackTime, callbackUrl); 

면책 조항 : 나는 Revalee과 관련된 개발자의 한했다 계획. 그러나 Revalee는 무료 오픈 소스 소프트웨어입니다. 소스 코드는 GitHub에 있습니다.

관련 문제