特定の時間に通知(電子メール)を受信するためのスケジューラーが必要なWebサイトがあります。例えば。午後5時にリマインダーを設定して午後4時45分に会議に出席する人は、午後4時45分にほぼ同じメールを受信します。
このサイトは共有サーバーでホストされているため、SQLジョブまたはスケジューラアプリケーションを実行するためのサーバーを制御することはできません。
このシナリオで役立つasp.netに何かありますか?
特定の時間に通知(電子メール)を受信するためのスケジューラーが必要なWebサイトがあります。例えば。午後5時にリマインダーを設定して午後4時45分に会議に出席する人は、午後4時45分にほぼ同じメールを受信します。
このサイトは共有サーバーでホストされているため、SQLジョブまたはスケジューラアプリケーションを実行するためのサーバーを制御することはできません。
このシナリオで役立つasp.netに何かありますか?
これはどうですか: ASP.NET を使用して Windows サービスをシミュレートし、スケジュールされたジョブを実行します。
ある時点で、この手法はStack Overflowで使用されていましたが、もう使用されていないと思います。
正直なところ、私には厄介でエラーが発生しやすいハックのように思えますが、Web サイト以外のサーバーで何も実行できない場合は、おそらくこのような方法が唯一の選択肢です。
サーバーでジョブを実行する必要がありますが、ASP.NET からトリガーする良い方法がありませんか?
ジョブを開始する Web ページを作成し、そのページを要求する別の場所 (つまり、別のコンピューター) でタイマーを実行するのはどうでしょうか。(ページを押すだけでジョブがトリガーされます)
私はあなたと同じ問題を抱えていて、Quartz.NET: http://quartznet.sourceforge.net/を利用して Web サイトと同じデータベースに接続するサービスをプログラミングすることになりました。
ASP.NETを使用すると、アプリが常に稼働していることが保証されないため、スケジューリングソリューションのホストプロセスとしてのWebアプリケーションは実行可能なIMOではありません。
このシナリオに必要なのはWindowsサービスです。プロセスの開始と停止、およびアプリケーションの監視方法を完全に制御できます。
このようなサービスを別のマシンでホストできますか?Webアプリケーションがホストされたサーバーで実行されている場合でも、同じサーバーでスケジューラーを実行する必要があるわけではありません。
If you really have no control over the server (meaning, you cannot use an sql job, a scheduled task, or install a windows server) then you could use a System.Threading.Timer that you initialize in your Global.asax (e.g, on application startup) that invokes a certain method in your application every x minutes. This method would then query your database and see what notifications need to be send.
This is really not a desirable approach though, as the timer is not guaranteed to always invoke as far as I know, since, like Peter says, your web application is not guaranteed to be alive at all times.
However, depending on your requirements, it can still be a 'good enough' approach if you have no other options.
ただし、本当に完全に行き詰まっていて、WebAppでホストする以外に選択肢がない場合は、
System.Timers.Timer
Global.asax.csファイルにインスタンスを作成することを検討できます。通常どおりにElapsedイベントを接続し、次の行に沿って何かを実行するコードを指定します。
protected void myTimer_Elapsed(object sender, EventArgs e)
{
if(System.DateTime.Now Falls in Some Configured Time-Window)
//Do Stuff
}
しかし、誰かが指摘したように、IISがその期間中にリセットされる可能性があるため、保証されていません。その場合、IISを見逃すことになります。
それは本当に望ましいことではありませんが、Razzie が提案していることはできます。私はそれが行われるのを何度も見てきました。醜いですが、時には醜いハックをしなければならないこともあります.
ただし、この方法を使用する場合、アプリケーションがアンロードされていないことを確認する必要があります。したがって、何らかのキープアライブが必要です。アプリケーションを存続させるために、ページ (aspx) を常にプルする Web 監視ツールをセットアップすることをお勧めします。これらの人は無料ですhttp://mon.itor.us/
Quartz.Net (1.0 および 1.0.1) のソース コードは Visual Studio.Net 2005 および 2008 ではコンパイルできないため、信じられません。Quartz.Net を取得する唯一の方法は、Spring.Net パッケージ全体を使用することです。 、VS.Net 2005 および 2008 で正常にコンパイルされます
いくつかのヒントを共有できない限り、asp.net プロジェクトで Quartz.dll をコンパイルして使用する方法を教えてください。(Quartz.Net および readme.txt の Web ページには、ソースコードのコンパイルに関する情報はありません) あらゆるヒントを歓迎します!
私も最初は苦労しましたが、これは親フォルダに必要なAsemblyInfo.csが入っているためです。また、含まれている 3 つの DLL を追加する必要があります。
Quartz.Net (1.0 および 1.0.1) のソース コードは Visual Studio.Net 2005 および 2008 ではコンパイルできないため、信じられません。Quartz.Net を取得する唯一の方法は、Spring.Net パッケージ全体を使用することです。 、VS.Net 2005 および 2008 で正常にコンパイルされます
いくつかのヒントを共有できない限り、asp.net プロジェクトで Quartz.dll をコンパイルして使用する方法を教えてください。(Quartz.Net および readme.txt の Web ページには、ソースコードのコンパイルに関する情報はありません) あらゆるヒントを歓迎します!