asp.netにジョブスケジューラが必要
-
13-09-2019 - |
質問
特定の時間に通知 (電子メール) を受信するためのスケジューラが必要な Web サイトがあります。例えば。午後 5 時に午後 4 時 45 分の会議に出席するようリマインダーを設定している人は、午後 4 時 45 分に同じ内容の電子メールを受信します。
このサイトは共有サーバーでホストされているため、SQL ジョブやスケジューラ アプリケーションを実行するサーバーを制御することはできません。
このシナリオで役立つものは asp.net にありますか?
解決
これはどう: / <スケジュールされたジョブを実行するようにASP.NETを使用してWindowsサービスをシミュレート>。
1つの時点で、この技術は、私が、スタックオーバーフローのの上で使用されるのましたこれ以上はないと思います。
それは私には厄介な、エラーを起こしやすいハックのように思えるが、あなたはあなたのウェブサイト以外のサーバー上で何かを実行することができませんならば、このようなものは、おそらくあなたの唯一のオプションです。
正直に言うと、他のヒント
は、サーバーで仕事を持っている必要がありますが、ASP.NETからそれをトリガーするのは良い方法を持っていますか?
どのようにあなたの仕事を開始し、(別のコンピュータ上で。すなわち)他の場所で実行するタイマーを持つことになり、Webページの作成について、そのページを要求しています。 (ちょうどあなたの仕事をトリガするためにページを打つ)
私はあなたと同じ問題を抱えていたと私はプログラミングのサービスになってしまったその利用Quartz.NET:ます。http: //quartznet.sourceforge.net/ とウェブサイトと同じデータベースに接続します。
は、ASP.NETを使用すると、アプリケーションがすべての回で生きている、とスケジューリングソリューションのホストプロセスとしてので、ウェブアプリケーションがIMO実現不可能であることを保証するものではありません。
Windowsサービスを使用すると、このシナリオのために必要なものです。あなたは完全なプロセスを起動および停止の制御だけでなく、アプリケーションを監視する方法があります。
あなたは別のマシン上でこのようなサービスをホストすることができますか? Webアプリケーションがホストされたサーバー上で実行されている場合でも、あなたが同じサーバー上のスケジューラを実行する必要が意味するものではありません。
本当にサーバーを制御できない場合 (つまり、SQL ジョブ、スケジュールされたタスクを使用できない、または Windows サーバーをインストールできない)、 システム.スレッディング.タイマー これは、Global.asax (アプリケーションの起動時など) で初期化され、x 分ごとにアプリケーション内の特定のメソッドを呼び出します。このメソッドはデータベースにクエリを実行し、どのような通知を送信する必要があるかを確認します。
ただし、これは実際には望ましいアプローチではありません。私の知る限り、タイマーが常に呼び出されることは保証されていません。Peter が言うように、Web アプリケーションが常に動作していることが保証されていないからです。
ただし、要件によっては、他に選択肢がない場合でも、これで十分なアプローチになる可能性があります。
あなたが本当に完全に立ち往生しているウェブアプリケーションでそれをホストするしかないただし場合、
あなたがGlobal.asax.csファイルにSystem.Timers.Timer
インスタンスを作成する時に見ることができます。通常どおりElapsedイベントをアップワイヤー、及びそれを
protected void myTimer_Elapsed(object sender, EventArgs e)
{
if(System.DateTime.Now Falls in Some Configured Time-Window)
//Do Stuff
}
誰かが指摘したようにIISがその期間中にリセットされる可能性がありますように、しかし、その保証はありません、 その場合、あなたはそれを逃しています。
これは本当にすることは望ましくないのですが、あなたはRazzieが示唆されたものを行うことができます。私はそれが何回も行って見てきました。醜いが、時にはyaはちょうど醜いハックを行う必要があります。
しかし、この方法を使用して、あなたのアプリケーションがアンロードされていないことを確認する必要があります。だから、あなたは生き続けるのいくつかの並べ替えを必要とします。私は常に生きているアプリケーションを維持するためにページ(ASPX)を引っ張ってくるのウェブ監視ツールを設定することをお勧め。これらの人は、無料の http://mon.itor.us/する
ありますソースので、私は、あなたを信じていません Quartz.Netのコード(1.0および1.0.1) ビジュアルの下でコンパイルされません。 Studio.Net 2005年と2008年の唯一の方法 取得するにはQuartz.Netは全体使用することです コンパイルSpring.Netパッケージ、 VS.Net 2005および2008の下に細かい
あなたはいくつかのヒントを共有することができない限り、どのように コンパイルにquartz.dllを使用します asp.netプロジェクト!の(ウェブページ Quartz.Netとのreadme.txtにはありません ソース上の任意の情報を提供 coudeコンパイル)すべての先端があります 歓迎!
私も最初にトラブルがあったが、必要なAsemblyInfo.csが親フォルダに含まれているためです。また、あなたが含まれている3つのDLLを追加する必要があります。
Quartz.Net(1.0および1.0.1)のソースコードは、Visual Studio.Net 2005年と2008年Quartz.Netを取得する唯一の方法の下でコンパイルされませんので、私は、あなたを信じていない全体の春を使用することですVS.Net 2005および2008の下で罰金コンパイル.NETパッケージ、
あなたはいくつかのヒントを共有することができない限り、、どのようにコンパイルするとasp.netプロジェクトにquartz.dllを使用!すべての先端が歓迎される(Quartz.Netとのreadme.txtのWebページがソースcoudeコンパイル上の任意の情報を提供していません)!