EtwTracking サンプルでは、ワークフロー サービスで Windows Workflow Foundation (WF) 追跡を有効にし、Windows イベント トレーシング (ETW) で追跡イベントを出力する方法を示します。 ワークフロー追跡レコードを ETW に出力するために、サンプルでは ETW 追跡参加要素 (EtwTrackingParticipant) を使用します。
サンプルのワークフローは要求を受け取り、入力データの逆数を入力変数に割り当て、逆数をクライアントに返します。 入力データが 0 の場合、ワークフローを中止するハンドルされない 0 除算例外が発生します。 追跡を有効にすると、エラー追跡レコードが ETW に出力されます。これは、後でエラーのトラブルシューティングを行うのに役立ちます。 ETW 追跡参加要素は、追跡レコードをサブスクライブする追跡プロファイルで構成されます。 追跡プロファイルは、Web.config ファイルで定義され、構成パラメーターとして ETW 追跡参加要素に提供されます。 ETW 追跡参加要素は、ワークフロー サービスの Web.config ファイルで構成され、サービスの動作としてサービスに適用されます。 このサンプルでは、イベント ビューアーを使用して、イベント ログに追跡イベントを表示します。
ワークフロー追跡の詳細
Windows Workflow Foundation には、ワークフロー インスタンスの実行を追跡するための追跡インフラストラクチャが用意されています。 追跡ランタイムは、ワークフロー ライフサイクルに関連するイベント、ワークフロー アクティビティからのイベント、およびカスタム イベントを出力するワークフロー インスタンスを作成します。 次の表では、追跡インフラストラクチャの主要なコンポーネントについて詳しく説明します。
コンポーネント | 説明 |
---|---|
追跡ランタイム | 追跡レコードを出力するインフラストラクチャを提供します。 |
参加者の追跡 | 追跡レコードにアクセスします。 .NET Framework 4.6.1 には、Windows イベント トレーシング (ETW) イベントとして追跡レコードを書き込む追跡参加要素が付属しています。 |
追跡プロファイル | 追跡参加要素がワークフロー インスタンスから出力された追跡レコードのサブセットをサブスクライブできるようにするフィルター処理メカニズム。 |
次の表は、ワークフロー ランタイムが出力する追跡レコードの詳細を示しています。
追跡レコード | 説明 |
---|---|
ワークフロー インスタンス追跡レコード。 | ワークフロー インスタンスのライフサイクルについて説明します。 たとえば、ワークフローの開始時または完了時にインスタンス レコードが出力されます。 |
アクティビティ状態追跡レコード。 | アクティビティの実行の詳細。 これらのレコードは、アクティビティがスケジュールされたとき、アクティビティが完了したとき、またはエラーがスローされたときなど、ワークフロー アクティビティの状態を示します。 |
ブックマーク再開レコード。 | ワークフロー インスタンス内のブックマークが再開されるたびに生成されます。 |
カスタム追跡レコード。 | ワークフロー作成者は、カスタム追跡レコードを作成し、カスタム アクティビティ内でそれらを出力できます。 |
ActivityScheduledRecord | このレコードは、アクティビティが別のアクティビティをスケジュールするときに生成されます。 |
FaultPropagationRecord | このレコードは、アクティビティから障害が伝達されたときに生成されます。 |
CancelRequestedRecord | このレコードは、アクティビティが別のアクティビティによって取り消されたときに生成されます。 |
追跡参加要素は、追跡プロファイルを使用して、出力された追跡レコードのサブセットをサブスクライブします。 追跡プロファイルには、特定の追跡レコードの種類をサブスクライブできる追跡クエリが含まれています。 追跡プロファイルは、コードまたは構成で指定できます。
このサンプルを使用するには
Visual Studio を使用して、EtwTrackingParticipantSample.sln ソリューション ファイルを開きます。
ソリューションをビルドするには、Ctrl キーと Shift キーを押しながら B キーを押します。
ソリューションを実行するには、F5 キーを押します。
既定では、サービスはポート 53797 (
http://localhost:53797/SampleWorkflowService.xamlx
) でリッスンしています。エクスプローラーを使用して、WCF テスト クライアントを開きます。
WCF テスト クライアント (WcfTestClient.exe) は、 <Visual Studio のインストール フォルダー>\Common7\IDE\ フォルダーにあります。
既定の Visual Studio インストール フォルダーは C:\Program Files\Microsoft Visual Studio 10.0 です。
WCF テスト クライアントで、[ファイル] メニューから [サービスの追加] を選択します。
入力ボックスにエンドポイント アドレスを追加します。 既定値は
http://localhost:53797/SampleWorkflowService.xamlx
です。イベント ビューアー アプリケーションを開きます。
サービスを呼び出す前に、[スタート] メニューからイベント ビューアーを 起動 し、[ 実行 ] を選択し、
eventvwr.exe
入力します。 イベント ログがワークフロー サービスから出力された追跡イベントをリッスンしていることを確認します。イベント ビューアーのツリー ビューで、 イベント ビューアー、 アプリケーションとサービス ログ、 および Microsoft に移動します。 Microsoft を右クリックし、[表示] を選択し、[分析ログとデバッグ ログの表示] を選択して、分析ログとデバッグ ログを有効にします
[ 分析ログとデバッグ ログの表示 ] オプションがオンになっていることを確認します。
イベント ビューアーのツリー ビューで、 イベント ビューアー、 アプリケーションおよびサービス ログ、 Microsoft、 Windows、 Application Server-Applications に移動します。 [分析] を右クリックし、[ログの有効化] を選択して分析ログを有効にします。
をダブルクリックして、WCF テスト クライアントを使用してサービスをテストします。
これにより、
GetData
メソッドが開きます。 要求は 1 つのパラメーターを受け取り、値が 0 (既定値) であることを確認します。[ 呼び出し] をクリックします。
ワークフローから生成されたイベントを確認します。
イベント ビューアーに戻り、 イベント ビューアー、 アプリケーション、サービス ログ、 Microsoft、 Windows、 Application Server-Applications に移動します。 [分析] を右クリックし、[最新の情報に更新] を選択します。
ワークフロー イベントがイベント ビューアーに表示されます。 ワークフロー実行イベントが表示され、そのうちの 1 つがワークフロー内のエラーに対応するハンドルされない例外であることに注意してください。 また、ワークフロー アクティビティから警告イベントが生成されます。これは、アクティビティがエラーをスローしていることを示します。
エラーがスローされないように、0 以外のデータの入力で手順 9 と 10 を繰り返します。
追跡プロファイルを使用すると、ワークフロー インスタンスの状態が変化したときにランタイムによって生成されるイベントをサブスクライブできます。 監視の要件に応じて、非常に粗いプロファイルを作成できます。このプロファイルは、ワークフロー上の少数の高レベルの状態変更をサブスクライブします。 一方、実行を後で再構築するのに十分な量の出力を持つ、非常に正確なプロファイルを作成できます。 このサンプルでは、 HealthMonitoring Tracking Profile
を使用してワークフロー ランタイムから ETW に出力されるイベントを示します。これは、少数のイベントセットを出力します。 さらに多くのワークフロー追跡イベントを出力する別のプロファイルも、 Troubleshooting Tracking Profile
という名前の Web.config で提供されます。 .NET Framework 4.6.1 をインストールすると、Machine.config ファイルに空の名前の既定のプロファイルが構成されます。 このプロファイルは、プロファイル名または空のプロファイル名が指定されていない場合に、ETW 追跡動作構成によって使用されます。
正常性監視追跡プロファイルは、ワークフロー インスタンス レコードとアクティビティエラー伝達レコードを出力します。 このプロファイルは、次の追跡プロファイルを Web.config 構成ファイルに追加することによって作成されます。
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
プロファイルは、 EtwTrackingParticipant
構成を次のように変更することで変更できます。
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
クリーンアップするには (省略可能)
イベント ビューアーを開きます。
イベント ビューアー、アプリケーション、サービス ログ、Microsoft、Windows、Application Server-Applications に移動します。 [分析] を右クリックし、[ログの無効化] を選択します。
イベント ビューアー、アプリケーション、サービス ログ、Microsoft、Windows、Application Server-Applications に移動します。 [分析] を右クリックし、[ログのクリア] を選択します。
[ クリア ] オプションを選択してイベントをクリアします。
既知の問題
注
イベント ビューアーには、ETW イベントのデコードに失敗する可能性がある既知の問題があります。 次のようなエラー メッセージが表示される場合があります。
ソース MicrosoftWindows-Application Server-Applications からのイベント ID <id> の説明が見つかりません。 このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが壊れています。 ローカル コンピューターにコンポーネントをインストールするか、コンポーネントを修復してください。
このエラーが発生した場合は、操作ウィンドウで [更新] をクリックします。 これで、イベントが正しくデコードされます。
こちらも参照ください
.NET