2011-07-06 3 views
0

내 프로젝트에서 일정 제어를 사용했습니다. 단일/여러 사용자에 대한 약속을 수정할 수 있습니다. 약속을 저장/편집하여 선택한 사용자에게 메일을 보내도록 구성했습니다.asp.net mvc에서 windows 서비스를 사용하여 자동으로 메일을 보내는 방법

이제 약속 시간 동안 선택한 사용자에게 매 30 분마다 Windows 서비스를 사용하여 자동으로 메일을 보내야합니다. 예를 들어 약속 시간이 오후 2시에서 4시 사이 인 경우, 30 분마다 자동으로 오후 2시에서 4시 사이에 우편물을 보내야합니다.

Windows 서비스를 설치했습니다. 하지만 MVC 웹 프로젝트를 Windows 서비스와 연결하는 방법을 모르겠습니다. 웹 프로젝트에서 MDF 데이터베이스를 사용하고 있습니다. 윈도우 서비스에서 이러한 데이터를 처리하는 방법을 모르겠습니다.

제발 어떤 식 으로든 제안 해주세요. MVC 및 Windows 서비스에 완전히 익숙합니다.

미리 감사드립니다.

답변

0

Windows 서비스를 사용할 필요가 없습니다. 설명 된 모든 내용은 응용 프로그램 내장 HttpModule 일명 Global.asax를 사용하여 해결할 수 있습니다.

높은 수준의 개념은 HttpApplication을 실행 상태로 유지하고 MVC 웹 응용 프로그램이 IIS에 배포 된 응용 프로그램의 수명 시간 내에 유지하는 것입니다. 이는 20 분에 비활성 비활성으로 인해 Application_End 실행을 방지하기위한 것입니다.

응용 프로그램을 실행 한 후에는 데이터베이스와 통신하고 전자 메일을 보내기 위해 원하는 시간 간격을 예약 할 수 있습니다. 이것은 작업을 수행하는 가장 간단한 방법입니다.

는 CodeProject의 샘플이 : http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

1

내가 잘 질문을 인식하지 못했습니다, 그러나, 웹 응용 프로그램 및 Windows 서비스 사이의 연결 지점은 데이터베이스입니다. 웹 응용 프로그램은 보류중인 약속을 데이터베이스에 기록합니다. 그런 다음 Windows 서비스는 30 분마다 확인합니다 (예 : 이메일을 보내야하는 보류중인 약속이있는 경우). 전자 메일을 보내야한다는 사실을 알게되면 전자 메일을 보내고 Db 항목을 완료된 것으로 표시합니다 (즉, 알림을 보냈 음을 의미). in another answer을 언급 한대로 Quartz.net을 사용할 수도 있지만 Windows 서비스도 좋은 해결책입니다.

2

질문에 설명 된 문제는 Revalee 오픈 소스 프로젝트를 사용하는 것과 같습니다.

Revalee는 ASP.NET MVC 응용 프로그램에 웹 콜백을 예약 할 수있게 해주는 서비스입니다. Revalee는 Windows 서비스를 사용하여 작업 지속성 및 일정을 관리하지만 ASP.NET MVC 응용 프로그램을 활용하여 처리 작업 (즉 "작업")을 처리합니다. 귀하의 경우 MVC 응용 프로그램을 사용하여 Revalee가 MVC 응용 프로그램을 다시 호출 할 때 사용자에게 자동화 된 전자 메일 메시지를 보냅니다.

약속이 예약

Revalee Workflow http://revalee.sageanalytic.com/Images/workflow.png

, 응용 프로그램 Revalee와 콜백 작업을 등록 할 것입니다 :

다음은 Revalee와 함께 MVC 응용 프로그램에서 사용하는 워크 플로우의 개요를 보여줍니다. 여기에는 MVC 응용 프로그램을 다시 호출하는 데 걸리는 시간 &과 호출 할 URL이 포함됩니다. 따라서 Revalee에 콜백을 등록하려면 MVC 응용 프로그램에 다음 메소드를 포함시킬 수 있습니다.

[AllowAnonymous] 
[CallbackAction] 
public ActionResult SendAppointmentEmail(int appointmentId) 
{ 
    // TODO 1. Validate the appointmentId, 
    //  2. Lookup the appointment's information, & 
    //  3. Send the email message 
    // ... 

    return new EmptyResult(); 
} 

Revalee 웹 사이트는 Windows 서비스를 설치하고 구성하는 방법에 대한 완전한 API 참조뿐만 아니라 지침이있다 : 당신의 MVC 응용 프로그램이 콜백을 수신 할 때처럼

private void ScheduleAppointmentReminderEmail(int appointmentId) 
{ 
    // The DetermineAppointmentReminderTime() method is your private method 
    // which returns an appointment's next reminder time as a DateTimeOffset. 
    DateTimeOffset callbackTime = DetermineAppointmentReminderTime(appointmentId); 

    // The callback should at the task's end time 
    Uri callbackUrl = new Uri(
      string.Format(
        "http://mywebapp.com/Email/SendAppointmentEmail/{0}", 
        appointmentId 
       ) 
     ); 

    // Register the callback request with the Revalee service 
    RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl); 
} 

SendAppointmentEmail 작업이 보일 수 있습니다 . 이 서비스는 &을 Chocolatey에 쉽게 배치 할 수 있으며 Visual Studio에서 사용할 준비가 된 MVC 클라이언트 라이브러리는 NuGet에서 사용할 수 있습니다. (non-MVC client libraries도 있습니다.) 당연히 오픈 소스 프로젝트로서 Revalee의 완전한 소스 코드는 GitHub에 있습니다.

마지막으로, Revalee 서비스는 외부 타사 온라인 스케줄러 서비스가 아니라 을 설치하는 Windows 서비스를 자체 네트워크에서 완벽하게 제어합니다. 이 프로그램은 ASP.NET MVC 응용 프로그램에서 콜백 등록 요청을받을 수있는 Windows 서버에 상주하며 실행됩니다.

이 정보가 도움이되기를 바랍니다. 행운을 빌어 요!

면책 조항 : 저는 Revalee 프로젝트에 참여한 개발자 중 한 명입니다. 그러나 Revalee는 무료 오픈 소스 소프트웨어입니다. 소스 코드는 GitHub에 있습니다.

관련 문제