내 도메인에 특정 날짜/시간에 도달하면 전자 메일을 보낼 것으로 예상되는 이벤트 시스템이 포함되어 있으므로 등록 된 이벤트를 'invoke date' ; 이는 내 이해에 따라 신청 서비스에 대한 우려입니다.MVC/IIS (DDD)의 일정 예약
그러나 응용 프로그램은 상태 저장 구성 요소 ('세션'제외)를 지원하지 않는 IIS에서 MVC 응용 프로그램으로 호스팅되므로이 경우 적절한 해결책이 무엇인지 궁금합니다.
내 도메인에 특정 날짜/시간에 도달하면 전자 메일을 보낼 것으로 예상되는 이벤트 시스템이 포함되어 있으므로 등록 된 이벤트를 'invoke date' ; 이는 내 이해에 따라 신청 서비스에 대한 우려입니다.MVC/IIS (DDD)의 일정 예약
그러나 응용 프로그램은 상태 저장 구성 요소 ('세션'제외)를 지원하지 않는 IIS에서 MVC 응용 프로그램으로 호스팅되므로이 경우 적절한 해결책이 무엇인지 궁금합니다.
Revalee 오픈 소스 프로젝트를 사용하면 ASP.NET MVC 프로젝트에서 예약 작업을 수행 할 수 있습니다.
Revalee는 웹 응용 프로그램에 웹 콜백을 예약 할 수있는 서비스입니다. 귀하의 경우 특정 시간에 이메일을 발송하는 콜백 일정을 세울 수 있습니다. Revalee는 자동화 된 전자 메일 메시지를 보내거나 데이터베이스 값을 업데이트하는 것과 같이 개별 트랜잭션 작업 인 작업 (읽기 : 장기간 실행되지 않음)에서 매우 잘 작동합니다. 귀하의 행동을 수행하는 코드는 모두 귀하의 MVC 애플 리케이션 내에 상주합니다.
귀하의 웹 사이트에 등록한 후 27 일 이내에 새로운 사용자에게 이메일 메시지 ("귀하의 평가판 만료가 만료되었습니다"와 같은)을 보내야한다고 가정 해 봅시다.
이 Revalee를 사용하려면, 다음과 같습니다서버에 Revalee 서비스, Windows 서비스를 설치합니다. Windows 서비스는 컴파일 할 소스 코드 또는 Revalee website에서 사용할 수있는 미리 컴파일 된 버전으로 제공됩니다.
Visual Studio 프로젝트에서 MVC 관련 Revalee 클라이언트 라이브러리를 사용하십시오. (비 MVC 버전도 있습니다.) 클라이언트 라이브러리는 소스 코드 (다시 컴파일 할 것입니다) 또는 NuGet을 통해 사용할 수있는 미리 컴파일 된 버전으로 사용할 수 있습니다.
새 웹 사이트 사용자가 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);
}
이 앱은 당신이 할 코딩 한 어떤 작업을 수행 할 것입니다. 난이 도움이되기를 바랍니다
[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에 있습니다.
"적절한"이란 무엇입니까? 옵션 3은 매우 심각한 것 같습니다 : "나는 유틸리티 룸에 싱크대가 없으므로 집 전체를 교체 할 것입니다." –
@RobertHarvey 공정하기 위해서는 싱크대가없는 것이 진짜 문제인 것처럼 보입니다. :) 농담이 아니었지만 이제는 그 부분을 제거했습니다. '적절한'해결책으로 생각하는 것이 바람직합니다. 매우 일반적인 경우에 프레임 워크가 제공하는 솔루션입니다. 전체 Windows 서비스를 구현하려면 통신 API, 서비스 처리, 공유 구성 등이 필요합니다. 내가 수행 할 수있는 직접적인 방법이 아닙니다. – Acrotygma
기본 Windows 서비스 구현에는 약 20 http://code.msdn.microsoft.com/windowsdesktop/CSWindowsService-9f2f568e 참조 컨트롤러 메서드 중 하나를 통해 작업을 제출하십시오. 원한다면 REST를 호출 할 수도 있습니다. 간단한 .NET을 사용합니다. MVC 응용 프로그램과 Windows 서비스 간의 연결이 내부 서비스이기 때문에 현재 Windows 서비스에 작업을 제출하도록 원격 처리하고 있습니다. 그러나 WCF는 올바르게 작동합니다. –