2011-07-06 3 views
0

私のプロジェクトでは、私はスケジュールコントロールを使用しています。 1人または複数のユーザーの予定を修正することができます。私は、予定の保存/編集操作を通じて、選択したユーザーにメールを送信するように設定しました。asp.net mvcでwindowsサービスを使用して自動的にメールを送信する方法

私は、予約時間中に選択されたユーザーに30分ごとにWindowsサービスを使用して自動的にメールを送信する必要があります。例えば、ユーザーの予定が2pmから4pmの場合、30分ごとに2pmから4pmまで自動的にメールを送信する必要があります。

私はWindowsサービスをインストールしました。しかし、私はMVC WebプロジェクトをWindowsサービスにどのように接続するのか分かりません。 WebプロジェクトでMDFデータベースを使用しています。私はウィンドウサービスでそれらのデータをどのように処理するのか分かりません。

どうか私に教えてください。私はMVCとWindowsサービスを全く新しくしています。

ありがとうございます。

答えて

0

Windowsサービスを使用する必要はありません。あなたが記述したすべては、アプリケーションの組み込みHttpModule aka Global.asaxを使用することで解決できます。

高レベルの概念は、HttpApplicationを実行していて、アプリケーションのライフタイム内に保持することです。これは、IISにデプロイされたMVC Webアプリケーションです。これは、20分での非アクティブデフォルトによるApplication_Endの発火を防止するためです。

アプリケーションを実行したままにしておくと、データベースと通信して電子メールを送信するように希望の時間間隔をスケジューリングできます。これはあなたの仕事を行う最も簡単な方法です。

CodeProjectのサンプルがあります:http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

1

私は非常によくあなたの質問を認識できませんでしたが、しかし、WebアプリケーションとWindowsサービスとの接続点は、データベースです。 Webアプリケーションは、保留中の予定をデータベースに書き込みます。次に、電子メールを送信する必要がある保留中の予定がある場合など、Windowsサービスは30分ごとにチェックします。電子メールを送信する必要があることがわかった場合、電子メールを送信し、Dbのエントリを完了したものとしてマークします(つまり、通知を送信したことを意味します)。私はin another answerと言ったようにQuartz.netを使うこともできますが、Windowsサービスも良い解決策です。

2

あなたの質問に記載されている問題は、Revaleeオープンソースプロジェクトをうまく使っているようです。

Revaleeは、ASP.NET MVCアプリケーションへのWebコールバックをスケジュールできるサービスです。 RevaleeはWindowsサービスを使用してタスクの永続性とスケジューリングを管理しますが、ASP.NET MVCアプリケーションを利用して処理の労力(つまり「仕事」)を処理します。あなたのケースでは、MVCアプリケーションを使用して、MVCアプリケーションがRevaleeによって呼び戻されたときに、ユーザーに自動化された電子メールメッセージを送信します。

以下はRevaleeとMVCアプリケーションで使用されるワークフローの概要を示しています

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

予定が予定されている場合は、アプリケーションがRevaleeとコールバックアクションを登録します。これには、&のMVCアプリケーションを呼び出す時刻と、呼び出すURLが含まれます。したがってRevaleeでコールバックを登録するには、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); 
} 

あなたのMVCアプリケーションは、コールバックを受信すると、SendAppointmentEmailアクションは次のようになります。

[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のウェブサイトは、完全なAPIリファレンスだけでなく、Windowsサービスをインストールして設定する方法について説明してい。 Visual Studioで使用できるMVCクライアントライブラリはNuGetにありますが、&のインテグレーションはChocolateyに簡単に配備できます。 (non-MVC client librariesもあります)当然、オープンソースプロジェクトとして、Revaleeの完全なソースコードはGitHubにあります。

最後に、Revaleeサービスは外部の第三者のオンラインスケジューラーサービスではなく、自分のネットワーク上でを完全に制御するWindowsサービスをインストールします。これは、自分のASP.NET MVCアプリケーションからのコールバック登録要求を受け取ることのできるWindowsサーバー上に存在し、実行されます。

こちらがお役に立てば幸いです。幸運を!

免責事項:私はRevaleeプロジェクトに携わった開発者の一人でした。しかし、Revaleeは無料のオープンソースソフトウェアです。ソースコードはGitHubにあります。

関連する問題