0

私は、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 回だけ実行したいのです。
  • インスタンスがクラッシュ/ダウンした場合、その状態が維持されるようにするにはどうすればよいですか?

ヘルプ、ガイダンスなどは大歓迎です。

4

1 に答える 1

-1

いくつかの良い質問に答えたいと思いますが、このようなフォーラムで質問をするのは難しいでしょう. しかし、それを試してみましょう。少なくとも始めるには。

1) スケジュールされたタスクを実装するためのアプローチに問題はありません。他にもいくつか方法が思い浮かびます。Do{Thread.Sleep(); を使用して単純なワーカー ロールを実行するように。...} シンプルですが効果的です。Azure でタスクをスケジュールするために外部ライブラリとフレームワークを使用するなど、より複雑で洗練された方法もあります。

2)ワークフロー/ジョブ処理エンジンにある種のシングルトン型パターンを実装する必要があります。たとえば、ジョブの開始時に 1Kb の BLOB レコードのリースを取得し、別のインスタンスの開始を許可しないようにすることができます。

より詳細な回答が必要な場合は、これをオフラインにして Skype 通話を行い、お客様の要件について詳しく話し合うことをお勧めします。メールで連絡を取る方法はご存知ですね :) 楽しみにしています。

于 2012-08-15T06:20:34.570 に答える