5

50秒ごとにデータをデータベースに書き込む必要があります。これはバックグラウンドで実行されているWindowsサービスと似ています。私が以前に挿入した少量のデータをメモリに保存する必要があるため、私の場合は起動と停止はオプションではありません。 Windows AzureまたはAWSを使用している場合、これに最適なソリューションは何ですか?Windows Azureで長期間(または永遠に)タスクを実行する

ありがとうございます。

答えて

7

Windows Azureでは、@Lucifureが示唆しているように、WebまたはWorkerロール(基本的にWindows 2008 Server R2またはSP2のいずれか)を選択でき、何らかのタイプのタイムドイベントがあります。また、Quartz.netのようなスケジューラを実行したり、Windows Azureキューやサービスバスキューを利用して特定の時刻にメッセージを表示することもできます。ただし、定期的にVMインスタンスが再起動される(たとえば、毎月のホストOSの保守の場合など)、所与のロールインスタンスに「永遠の」タスクを持たせることはできません。ロールシャットダウンでは、通知を受け取り、Stopping()またはOnStop()にこれらのシャットダウン通知を処理できます。複数のインスタンスがある場合は、スケジューラーまたはキューを使用して、50秒ごとにイベントがトリガーされ、複数のインスタンス間で処理されるようにすることができます(ただし、常に1つのインスタンスのみで処理されます)。

メモリ内の情報を保持するには、その情報をキャッシュに格納することをお勧めします。次の2つの選択肢があります。

  • 分散型(共有)キャッシュサービス。ロールインスタンスとは独立して実行されます。
  • 2012年6月に導入されたメモリ内キャッシュ。複数のインスタンスがある場合、キャッシュはそれらのインスタンスに分散されます。既存のロールのメモリ内でキャッシュを実行することもできます。

キャッシングに関する詳細は、hereです。

Quartz.netとWindows Azureに関するいくつかのStackOverflowの回答があります(this oneなど)。

1

System.Threading.Timerを設定して50秒ごとに起動し、イベントが発生するたびに作業を行うことができます。