6

特定の時間に通知(電子メール)を受信するためのスケジューラーが必要なWebサイトがあります。例えば。午後5時にリマインダーを設定して午後4時45分に会議に出席する人は、午後4時45分にほぼ同じメールを受信します。

このサイトは共有サーバーでホストされているため、SQLジョブまたはスケジューラアプリケーションを実行するためのサーバーを制御することはできません。

このシナリオで役立つasp.netに何かありますか?

4

9 に答える 9

9

これはどうですか: ASP.NET を使用して Windows サービスをシミュレートし、スケジュールされたジョブを実行します

ある時点で、この手法はStack Overflowで使用されていましたが、もう使用されていないと思います。

正直なところ、私には厄介でエラーが発生しやすいハックのように思えますが、Web サイト以外のサーバーで何も実行できない場合は、おそらくこのような方法が唯一の選択肢です。

于 2009-04-23T11:41:46.743 に答える
4

サーバーでジョブを実行する必要がありますが、ASP.NET からトリガーする良い方法がありませんか?

ジョブを開始する Web ページを作成し、そのページを要求する別の場所 (つまり、別のコンピューター) でタイマーを実行するのはどうでしょうか。(ページを押すだけでジョブがトリガーされます)

于 2009-04-23T11:47:29.570 に答える
3

私はあなたと同じ問題を抱えていて、Quartz.NET: http://quartznet.sourceforge.net/を利用して Web サイトと同じデータベースに接続するサービスをプログラミングすることになりました。

于 2009-04-23T11:52:27.343 に答える
2

ASP.NETを使用すると、アプリが常に稼働していることが保証されないため、スケジューリングソリューションのホストプロセスとしてのWebアプリケーションは実行可能なIMOではありません。

このシナリオに必要なのはWindowsサービスです。プロセスの開始と停止、およびアプリケーションの監視方法を完全に制御できます。

このようなサービスを別のマシンでホストできますか?Webアプリケーションがホストされたサーバーで実行されている場合でも、同じサーバーでスケジューラーを実行する必要があるわけではありません。

于 2009-04-23T11:32:28.110 に答える
1

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.

于 2009-04-23T11:36:15.603 に答える
1

ただし、本当に完全に行き詰まっていて、WebAppでホストする以外に選択肢がない場合は、

System.Timers.TimerGlobal.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を見逃すことになります。

于 2009-04-23T11:36:49.737 に答える
0

それは本当に望ましいことではありませんが、Razzie が提案していることはできます。私はそれが行われるのを何度も見てきました。醜いですが、時には醜いハックをしなければならないこともあります.

ただし、この方法を使用する場合、アプリケーションがアンロードされていないことを確認する必要があります。したがって、何らかのキープアライブが必要です。アプリケーションを存続させるために、ページ (aspx) を常にプルする Web 監視ツールをセットアップすることをお勧めします。これらの人は無料ですhttp://mon.itor.us/

于 2009-04-23T11:42:31.267 に答える
0

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 を追加する必要があります。

于 2010-02-20T00:02:05.600 に答える
-1

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 ページには、ソースコードのコンパイルに関する情報はありません) あらゆるヒントを歓迎します!

于 2009-07-16T13:23:24.637 に答える