1

ビデオ処理デバイス間でビデオファイルを移動し、UIを駆動するために使用されるデータベースにファイルの状態を報告する非常に長いワークフローがあります

ユーザーがUIのボタンを押して、ファイルをビデオストレージサーバーに「受け入れる」場合があります。これには、あるサーバーから別のサーバーにファイルをコピーすることが含まれます。]

彼らは、この活動をキャンセルできるかどうか尋ねました。

wf4のドキュメントを見ましたが、ワークフローの一部をロールバックする方法がわかりません。

これは可能ですか、どのような手法を使用すればよいですか。

4

3 に答える 3

2

作業を元に戻すための 2 つの基本的な組み込みアクティビティがあります。

  1. ACID トランザクションの TransactionScope
  2. 長時間実行される作業の Compensable アクティビティ。

Compensable アクティビティを使用すると、アクティビティを補正ハンドラに追加して、以前に行った作業を元に戻すことができます。Compensate アクティビティを使用して、補正をトリガーできます。補償がない場合は、ワークフローの最後に自動的に、または Conform アクティビティを使用するときに、確認ハンドラーを取得します。

詳細については、A Developer's Introduction to Windows Workflow Foundation (WF) in .NET 4 by Matt Milner を参照してください。

于 2012-09-30T09:45:11.880 に答える
1

あなたのシナリオを完全に理解しているかどうかはわかりませんが、非同期スレッドで転送プロセスを実行する必要があると思います.「キャンセル」変数をチェックしてロールバックを実行する. この変数は、UI のメイン スレッドで変更できます。

もちろん、これにより、1回の転送の途中ではなく、転送間のキャンセルが可能になります.

于 2012-09-27T10:56:54.717 に答える
1

さて、最初に、すでにアップロードされたものを「ロールバック」する処理は手動で行う必要があるとしましょう。そのため、それらのチャンクを保存している場所はどこでも、キャンセル時に手動でクリーンアップする必要があります。

FlowChartさて、ワークフロー自体についてですが、私の意見では、次のように設定できます。

フローチャート

プロセス ループ パート 1

プロセス ループ パート 2

では、このワークフローを分解してみましょう。サービス全体を何らかのクライアント キーに関連付ける必要があります。これによりStart、クライアントごとに 1 回でサービスを開始して、起動コストを抑えることができます。

次に、クライアントが転送を開始したい場合はBeginTransfer、転送ループに移動する呼び出しを行います。転送ループは、必要に応じて を呼び出してチャンク間でキャンセルできるように設定されていますCancelTransfer

このモデルでは、同じブランチが転送を終了するためにも使用されます。これは、ループから抜け出すためです。転送が完了したら、チャンクを呼び出すだけCancelTransferです (それが気に入らない場合は、まったく同じように見える別のブランチをセットアップするだけです)。 )。

最後に、プロセス ループにいるときはSoftExit、ワークフロー全体をシャットダウンして、メンテナンスが必要な場合、クライアントが接続を終了して破棄する必要がある場合に、そっと強制終了できるようにすることができますSoftExit

于 2012-09-27T11:47:03.503 に答える