2

Web サービスを消費し、エラー処理を追加したいデータベースと通信する Workflow Foundation 4.0 RC コード アクティビティがたくさんあります。

Web サービス / db を呼び出して、通信障害などの障害をキャッチし、(例外をログに記録した後) 1 時間以内に同じ操作を再試行できるようにしたいと考えています。

このようなことをする方法はありますか?

protected override void Execute(CodeActivityContext context) {

  Persist(); // I would like to invoke the persist activity like this

  if (!AttemptServiceCall()) {

        // I would like to invoke a delay activity like this
        Delay(new TimeSpan(0, 30, 0)); // wait 30 mins before trying again
        Execute(context); // call this activity again
  }
}

private bool AttemptServiceCall() {

  bool serviceCallSuccessful = true;

  try {
        myService.InvokeSomeMethod();
  }
  catch (CommunicationException ex) {
        myEventLogger.Log(ex);
        serviceCallSuccessful = false;
  }

  return serviceCallSuccessful;
}
4

1 に答える 1

2

はい、WF4 のアクティビティがどのように機能するかを理解すれば、それはまったく難しいことではありません。

長い話を書くこともできますが、Richard Blewett は、あなたが説明したとおりの再試行アクションを実行する再試行アクティビティについて既にブログに書いているので、そのブログ投稿へのリンクをここに記載します。欠けているのは永続化だけですが、これは簡単に追加できるはずです。

AttemptServiceCall アクティビティを作成し、本体として追加するだけです。潜在的に長時間実行されるアクションのように聞こえることを考えると、基本クラスとして AsyncCodeActivity を使用することをお勧めします。

于 2010-03-23T16:21:20.747 に答える