2012-02-08 11 views
1

私は、既存のワークフローベースのソリューションにロギング機能を追加する作業があります。階層化されたアーキテクチャ:BusinessLayer-> AgentLayer-> StoreLayerがあります。ビジネスレイヤーには、1つまたは複数のエージェントアクティビティからなるxamlアクティビティがあります。エージェントアクティビティは、1つ以上のストアアクティビティから構成されます。エージェントアクティビティとストアアクティビティはCodeActivityから継承されます。ワークフローの基礎活動を記録する方法

活動は、私の仕事は、各アクティビティの実行をログに記録することです

WorkflowInvoker.Invoke(activity); 

によって実行されています。ログ出力。例:

BusinessActivity1 has been started at 11:00 8.2.2012 
AgentActivity1 has been started at 11:01 8.2.2012 
StoreActivity1 has been started at 11:02 8.2.2012 
StoreActivity1 has been ended at 11:03 8.2.2012 
AgentActivity1 has been ended at 11:04 8.2.2012 
BusinessActivity1 has been ended at 11:05 8.2.2012 

私の質問は、このようなログを記録するベストプラクティスです。 LogMessageを各アクティビティに書きたいとは思わない。私は統一されたソリューションを好む。どんな巧妙な解決策も存在しますか?

おかげ

+0

ちょっとしたアイデア:ワークフロー内の他のすべてのアクティビティをラップするカスタムアクティビティを作成することができます。このカスタムアクティビティは、その中のアクティビティが実行されるたびにログアクションを実行できます。以前にそのスキーマが動作していた(私はコードが残っていません)、システムでワークフローサービスの実行を追跡できました。 –

答えて

2

WFはすでにそれがWF Trackingを呼び出し、ロギング構成をサポートしています。既存のインフラストラクチャーに従うだけで、不必要なパフォーマンスオーバーヘッドが発生しないようにすることをお勧めします。

TrackingParticipantsの組み込み方法を調べる必要があります。 WorkflowInvoker.Invoke()WorkflowApplication)に置き換えるか、WorflowInvokerのインスタンスを作成して、TrackingParticipantWF Extensionsで追加できるようにする必要があります。 TrackingProfileを定義すると、トレースレベル、イベントタイプ、およびトラッキングレコードで興味のあるものだけにトラッキングメッセージを制限できます。

独自のカスタムTrackingRecordsをログに記録する場合は、ベースTrackingRecordから派生できます。

また、@Gabocatで提案されているようにラッピングカスタムアクティビティを構築することもできますが、これによりWFトラッキングではパフォーマンス上のオーバーヘッドが発生します。

+0

インスピレーションのおかげでみんな。私は追跡機能を使用します。 – zosim

+0

+1いいです。追跡について忘れていました。私が言及したシナリオはWFの初期バージョンで使用されていました。 –

関連する問題