私は、Windows Azure と Windows ワークフローの範囲についてまったくの初心者です。
しかし、基本的に、私が実装しようとしているのは、タイルの更新/バッジ/トースト通知を Winodws 8 アプリケーションにプッシュする役割を担う Cloud Web アプリです。
タイル通知などを送信するために実行するコードは問題ありませんが、約 1 時間ごとに実行する必要があります。
最も簡単なアプローチは、WebAPI を持つ MVC アプリケーションを作成することであると判断しました。この WebAPI は、それを送信する ModernApplication から ChannelURI を受け取り、SQL Azure に格納されます。
次に、新しいデータを収集し、新しいタイル/バッジ/トーストを生成するためのロジックを実行する静的メソッドを持つクラスがあります。
DoWhile(true) アクティビティを含むシーケンスを持つ単純なアクティビティ ワークフローを作成しました。この DoWhile の本体内には、InvokeMethod と Delay を持つ Sequence が含まれており、InvokeMethod は静的メソッドを含むクラスを呼び出します。遅延は 1 時間に設定されています。
それで大丈夫そうです。次に、次の行を使用して、Global.asax の Application_Start を介してこのアクティビティを開始します。
this.ActivityInvoker = new WorkflowInvoker(new NotificationActivity());
this.ActivityInvoker.InvokeAsync();
だから私はそれでそれをテストしたところ、設定された間隔でカスタム静的メソッドを実行しているようです。
それはそれでいいのですが、この処理方法に関して 3 つの質問があります。
- これはこれを行うための正しい/最良のアプローチですか? そうでない場合、私が調べるべき他の方法は何ですか。
- 新しいインスタンスが Azure で起動された場合、両方のインスタンスで実行中のワークフローが互いに足を踏み入れないようにするにはどうすればよいですか? つまり、InvokeMethod が 2 回実行されないようにするにはどうすればよいですか。インスタンスの数に関係なく、1 時間に 1 回だけ実行したいのです。
- インスタンスがクラッシュ/ダウンした場合、その状態が維持されるようにするにはどうすればよいですか?
ヘルプ、ガイダンスなどは大歓迎です。