1. ホーム
  2. ASP.NET

Application_End イベントをブロックする解決策

2022-02-19 04:21:57

あるプロジェクトで作業をしているときに、同期化された ERP <スパン データの問題点、お客様の要望は 番組内では プログラムが一定間隔で売上記録をエクスポートするための開始時刻と時間間隔を設定し、この開始時刻と時間間隔は手動で変更することが可能です。 <スパン



この問題は何日も悩まされましたが、ドキュメントを書くことでやっと解決しました。

<スパン まず、一定時間ごとにタスクを実行させるためには ASP.NET <スパン タイマー <スパン タイマーですが、このタイミングはあまり正確ではなく、これを使うと後述する別の問題が発生します。2つ目の方法は Quartz.NET <スパン 時間指定されたジョブのスケジューリングに特化したオープンソースプロジェクト。



<スパン 今回のプロジェクトでは Quartz.NET <スパン <スパン コンポーネントは、ジョブのスケジューリングに便利なのですが、問題があります。 しばらく実行した後、自動タスクが停止していることが判明する . Webで情報を確認すると、主張が様々です。 <スパン

    その後、私自身の実験だけでなく、多くの情報を確認したところ、Webアプリケーションはリクエストがない場合、一定時間後にアプリケーションを停止することが判明し、具体的には、Webサイトの最後の1つ セッション 終了すると、ウェブアプリケーションが終了します。もちろん、これが引き金となって アプリケーション終了 イベントを使用します。これによって、時間指定されたタスクは停止されます。 <スパン



<スパン
今、問われているのは どのようにすれば、すべてのサイトにリクエストを持たせることができますか?どうすれば アプリケーション_エンド イベントが発生しない?



この疑問もインターネット上ではいろいろと述べられており、例えば、以下のような指摘もあります。 アプリケーション終了 でサイトへのリクエストをシミュレートするプログラムにおいて、リスタート アプリケーション開始 イベントの場合、プログラムコードも <スパン http://asdfblog.com/technology/aspnet-scheduled-tasks-with-quartznet.html ここに詳しい説明があります。でも、ブロガーがやっていた通りにやっても、思い通りにならないんです。しかし、彼はそれを使って、処理 アイアイエス <スパン アプリケーションプールのリサイクルの問題。 <スパン



<スパン 孟子 E 章に書いてあります。実行されたタスクをスケジュールするために新しい別のスレッドが作成されます。個人的には、もっと面倒だと思い、この方法は使いませんでした。

    最後に、これを簡単に処理する方法が見つかりました。 ASP.NET キャッシュタイムアウトの手法です。明確にするために <スパン 基本的な考え方



<スパン アプリケーション起動時に、プログラムによりWebサイトのページをキャッシュする。ページをキャッシュする際、キャッシュの有効期限と、キャッシュが切れたときに発生するコールバックイベントを設定する。 キャッシュが失効したときに起動するコールバックイベント ここがポイントです。このプログラムを使って、キャッシュが切れたときにサイトのページを要求するシミュレーションを行い、再びキャッシュし、ループさせます。 ...



<スパン コードの説明:(すべて グローバル.asax <スパン )







  これにより、ウェブアプリケーションがウィンドウズサービスのようにバックグラウンドで静かに実行されるようになります。表示されない方は、こちらをご覧ください。 http://www.codeproject.com/KB/aspnet/ASPNETService.aspx



<スパン アタッチメントです。
<スパン 水晶のこと。 詳しいチュートリアルはこちらをご覧ください。



公式チュートリアルです。
http://quartznet.sourceforge.net/tutorial/index.html ;



<スパン 中国語の翻訳です。 http://www.cnblogs.com/shanyou/category/102991.html







<スパン  ====================================2013-8-2 Postscript ================================================

<スパン WebForm の Net コンポーネントは、個人的にテストした結果、安定性も十分でないと感じ、最終的には  <スパン Winformクライアントアプリケーション+Quartz.NETコンポーネントの実装で、サーバー上にプログラムが配置され実行されています。

サーバー側のプログラムが停止しないようにするには、Windowsサービスとして記述して、サーバーが起動したらタスクを実行し、サーバーが停止しない限り、プログラムが動き続けるようにすればよい。

<スパン もちろん、これは専用ホスティングにのみ有効で、仮想スペースには使えません。

<スパン アタッチメントです。

<スパン 1. Windowsサービスの書き方

http://msdn.microsoft.com/zh-cn/library/vstudio/9k985bc9.aspx

http://www.cnblogs.com/tuyile006/archive/2006/11/27/573654.html



2. Windowsサービスヘルパークラス。 http://blog.csdn.net/a497785609/article/details/9103129