中断されたインスタンスの管理
SuspendedInstanceManagement サンプル は、中断されたワークフロー インスタンスを管理する方法を示しています。 WorkflowUnhandledExceptionBehavior の既定のアクションは AbandonAndSuspend
です。 つまり、既定では、WorkflowServiceHost でホストされるワークフロー インスタンスからスローされた未処理の例外により、インスタンスがメモリから破棄され、インスタンスの永続バージョンが中断状態としてマークされることになります。 中断されたワークフロー インスタンスは、再開されるまで実行できません。
このサンプルは、中断されたインスタンスのクエリを実行するためにコマンド ライン ユーティリティを実装する方法と、インスタンスを再開または終了するオプションをユーザーに提供する方法を示しています。 このサンプルでは、ワークフローサービスが故意に例外をスローし、その結果としてワークフローサービスが中断されます。 その後、コマンド ライン ユーティリティを使用してインスタンスのクエリを実行し、その後インスタンスを再開または終了できます。
対象
Windows Workflow Foundation (WF) で WorkflowServiceHost を WorkflowUnhandledExceptionBehavior と WorkflowControlEndpoint と共に使用します。
議論
このサンプルで実装されているコマンド ライン ユーティリティは、.NET Framework 4.6.1 に付属する SQL インスタンス ストアの実装に固有です。 インスタンス ストアのカスタム実装がある場合は、サンプルの WorkflowInstanceCommand
実装をインスタンス ストアに固有の実装に置き換えることで、このユーティリティを調整できます。
指定された実装では、SQL インスタンス ストアに対して SQL コマンドを直接実行して中断されたインスタンスを一覧表示します。また、インスタンスを再開または終了するために、WorkflowServiceHost に追加された WorkflowControlEndpoint に依存します。
サンプルを設定、ビルド、実行するには
このサンプルでは、次の Windows コンポーネントが有効になっている必要があります。
Microsoft Message Queues (MSMQ) サーバー
SQL Server Express
SQL Server データベースを設定します。
Visual Studio のコマンド プロンプトで、SuspendedInstanceManagement サンプル ディレクトリから "setup.cmd" を実行します。このサンプル ディレクトリでは、次の処理が行われます。
SQL Server Express を使用して永続化データベースを作成します。 永続化データベースが既に存在する場合は、削除されて再作成されます
永続化のためにデータベースを設定します。
永続化のためにデータベースを設定するときに定義された InstanceStoreUsers ロールに IIS APPPOOL\DefaultAppPool と NT AUTHORITY\Network Service を追加します。
サービス キューを設定します。
Visual Studio で、
SampleWorkflowApp プロジェクトを右クリックし、[スタートアップ プロジェクトとして設定] をクリックします。 F5キー
押して SampleWorkflowApp をコンパイルして実行します。 これにより、必要なキューが作成されます。 を押して を入力して SampleWorkflowApp を停止させます。
コマンド プロンプトから Compmgmt.msc を実行して、コンピューター管理コンソールを開きます。
サービスとアプリケーションの、 メッセージ キュー、 プライベート キューを展開します。
ReceiveTx キューを右クリックし、[プロパティ]選択します。 [セキュリティ] タブをクリックし、Everyone グループに対して [メッセージの受信]、[メッセージのピーク]、および [メッセージの送信] アクセス許可を与えます。
次に、サンプルを実行します。
Visual Studio で、Ctrl
F5 キー押して、デバッグせずに SampleWorkflowApp プロジェクトをもう一度実行します。 コンソール ウィンドウに 2 つのエンドポイント アドレスが出力されます。1 つはアプリケーション エンドポイント用で、もう 1 つは WorkflowControlEndpointから出力されます。 その後、ワークフロー インスタンスが作成され、そのインスタンスの追跡レコードがコンソール ウィンドウに表示されます。 ワークフロー インスタンスが例外をスローし、その結果としてインスタンスは中断されて中止されます。 その後、コマンド ライン ユーティリティを使用して、これらのインスタンスに対してさらにアクションを実行できます。 コマンド ライン引数の構文は次のとおりです。
SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]
サポートされているコマンドは、
Query
、Resume
、およびTerminate
です。 InstanceId スイッチは、Resume
操作とTerminate
操作にのみ必要です。
クリーンアップするには (省略可能)
Compmgmt.msc を実行して、コンピューター管理コンソールを開きます。
サービスとアプリケーションの、 メッセージ キュー、 プライベート キューを展開します。
ReceiveTx キューを削除します。
永続化データベースを削除するには、cleanup.cmdを実行します。
.NET