5

背景: C# で記述された Windows Server 2008 で実行されている .NET 4.0 Web サービスがあります。コードを 1 日 1 回実行する asp.net Web サービス内でタイマーを実行したいと考えています。これに関するいくつかの制限について聞いたことがありますが (以下を参照)、ミッション クリティカルなコードではないため、いくつかの制限を回避し、コードを Web サービス内に保持するために、計画が正しいかどうかを尋ねています。ただし、クラッシュは容認できません。注:私はWCFを使用していませんし、使用できません。

計画:

  • Web サービスのコンストラクターで宣言してインスタンス化System.Threading.Timerします (コメントアウトされた行のすぐ隣: //InitializeComponent();)。
  • 30分ごとにタイマーを発射します。
  • 注: 私は使用しているためSystem.Threading.Timer、以下の msdn ヒント #6 に従ってキープアライブ コードを実行する必要はありません。
  • 現在の時刻がデータベースの値 (コードを実行するのに必要な時間) から 30 分以内の場合、コードを実行します。

質問:

  • 上記の計画を使用してasp.net c#コードで使用することがどれほど信頼できるかを知りたいのですがSystem.Threading.Timer、それが正しく実行される場合、97%以上の時間と言えますか?
  • この計画は、アプリケーション プールがリサイクルされたとき、および IIS サーバーが再起動されたときに機能しますか?

以下に関して、Web サービスでタイマーを使用する際に問題があるようです。

  • アプリ プールのリサイクル
  • スレッドが死んでいる
  • 誰も長い間ウェブにアクセスしません
  • 時間メモリの問題 (Windows サービスを使用することをお勧めします)

参考文献:

ASP.NET サイト - 特定の時間にコードを実行する

Web サービスの呼び出しを 1 時間ごとにアクティブにする Web サイトのタイマー

http://forums.asp.net/t/1079158.aspx/1

http://msdn.microsoft.com/en-us/magazine/cc163854.aspx (ヒント #6 を参照)

ヒント 6 より「System.Threading 名前空間にある Timer クラスは、非常に便利ですが、少なくとも Web 開発者にとっては、.NET Framework ではあまり知られていないクラスです。タイマーが作成されると、設定可能な間隔で ThreadPool からスレッドで指定されたコールバックが呼び出されます。これは、ASP.NET アプリケーションへの着信要求なしで実行するコードを設定できることを意味します。これは、バックグラウンド処理にとって理想的な状況です。このバックグラウンド プロセスでも、インデックス作成や電子メールの送信などの作業を行うことができます。」</p>

4

3 に答える 3

4

仕事に間違ったツールを使用しています。Web サービスはオンデマンドでの使用を目的としていますが、サービスとスケジュールされたタスクは定期的なアクティビティに使用する必要があります。関連するコードを Web サービスから共有ライブラリに移動し、Timerスケジュールされたタスクを介してスケジュールできる、またはコンソール アプリを使用して Windows サービスを作成します。

于 2012-10-25T14:25:19.243 に答える
0

Web サービス内ではなく、イベント内のGlobal.asax.csファイルにタイマー オブジェクトを設定できます。Application_Start

于 2012-10-25T14:49:38.153 に答える