このサンプルでは、Windows Communication Foundation (WCF) が .NET Framework Version 4 の ETW に書き込む分析トレースのストリームに独自のトレース イベントを追加する方法を示します。分析トレースは、パフォーマンスを低下させずに簡単にサービスを確認できるようにするためのものです。このサンプルでは、System.Diagnostics.Eventing API を使用して、WCF サービスと統合されるイベントを記述する方法を示します。
System.Diagnostics.Eventing API 詳細情報、「System.Diagnostics.Eventing」を参照してください。
Windows でのイベントのトレースの詳細については、「ETW によりデバッグおよびパフォーマンス調整を改善する」を参照してください。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<InstallDrive>:\WF_WCF_Samples
このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。
<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Management\AnalyticTraceExtensibility
|
EventProvider の破棄
このサンプルでは、System.IDisposable を実装した System.Diagnostics.Eventing.EventProvider クラスを使用します。WCF サービスのトレースを実装する場合、サービスの有効期間に EventProvider のリソースを使用することがあります。そのため、読みやすくするためにも、このサンプルでは、ラップされた EventProvider を破棄しません。何らかの理由で、サービスに対して別のトレースの要件を設定し、このリソースを破棄しなければならない場合は、アンマネージ リソースの破棄に関するベスト プラクティスに従ってこのサンプルを変更してください。アンマネージ リソースの破棄詳細情報、「Dispose メソッドの実装」を参照してください。
自己ホスト型と Web ホスト型
Web ホスト型サービスの場合は、WCF の分析トレースで "HostReference" というフィールドが設定され、そのフィールドを使用してトレースの生成元のサービスを識別します。拡張可能なユーザー トレースをこのモデルに加えることができます。このサンプルで、そのためのベスト プラクティスを示します。結果の文字列にパイプ文字 '|' が実際に表示さるときには、Web ホストの参照の形式は次のいずれかになります。
アプリケーションがルート以外にある場合
<サイト名><アプリケーション仮想パス>|<サービス仮想パス>|<サービス名>
アプリケーションがルートにある場合
<サイト名>|<サービス仮想パス>|<サービス名>
自己ホスト型サービスの場合は、WCF の分析トレースで "HostReference" フィールドが設定されません。このサンプルの WCFUserEventProvider
クラスは、自己ホスト型サービスで使用した場合も同じように動作します。
カスタム イベントの詳細
WCF の ETW イベント プロバイダー マニフェストには、WCF サービスの作成者がサービス コード内から生成できるように設計された 3 つのイベントが定義されています。次の表に、その 3 つのイベントの概要を示します。
イベント | 説明 | イベント ID |
---|---|---|
UserDefinedInformationEventOccurred |
このイベントは、問題以外の通知すべき処理がサービスで発生した場合に生成します。たとえば、データベースの呼び出しに成功した後にイベントを生成します。 |
301 |
UserDefinedWarningOccurred |
このイベントは、後続の処理でエラーになる可能性がある問題が発生した場合に生成します。たとえば、データベースの呼び出しが失敗したものの、冗長なデータ ストアを使用して回復できた場合に警告イベントを生成します。 |
302 |
UserDefinedErrorOccurred |
このイベントは、サービスが想定どおりに動作しなかった場合に生成します。たとえば、データベースの呼び出しが失敗し、別の場所からもデータを取得できなかった場合にイベントを生成します。 |
303 |
このサンプルを使用するには
Visual Studio 2010 を使用して、WCFAnalyticTracingExtensibility.sln ソリューション ファイルを開きます。
ソリューションをビルドするには、F6 キーを押します。
ソリューションを実行するには、Ctrl キーを押しながら F5 キーを押します。
Web ブラウザーで、[Calculator.svc] をクリックします。サービスの WSDL ドキュメントの URI がブラウザーに表示されます。その URI をコピーします。
WCF テスト クライアント (WcfTestClient.exe) を実行します。
WCF テスト クライアント (WcfTestClient.exe) は <Visual Studio 2010 のインストール ディレクトリ>\Common7\IDE\WcfTestClient.exe にあります (Visual Studio 2010 の既定のインストール ディレクトリは C:\Program Files\Microsoft Visual Studio 10.0 です)。
WCF テスト クライアントで、[ファイル] メニューの [サービスの追加] をクリックしてサービスを追加します。
入力ボックスにエンドポイントのアドレスを追加します。
[OK] をクリックしてダイアログ ボックスを閉じます。
ICalculator サービスが、左ペインの [マイ サービス プロジェクト] の下に追加されます。
イベント ビューアー アプリケーションを開きます。
サービスを呼び出す前に、イベント ビューアーを起動し、WCF サービスから生成された追跡イベントをイベント ログでリッスンしていることを確認します。
[スタート] メニューから、[管理ツール]、[イベント ビューアー] の順に選択します。[分析] ログと [デバッグ] ログを有効にします。
イベント ビューアーのツリー ビューで、[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。[アプリケーション サーバー - アプリケーション] を右クリックし、[表示]、[分析およびデバッグ ログの表示] の順にクリックします。
[分析およびデバッグ ログの表示] オプションがオンになっていることを確認します。[分析] ログを有効にします。
イベント ビューアーのツリー ビューで、[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows]、[アプリケーション サーバー - アプリケーション] の順に選択して [分析] に移動します。[分析] を右クリックし、[ログを有効にする] を選択します。
WCF テスト クライアントを使用してサービスをテストします。
WCF テスト クライアントで、ICalculator サービス ノードの下の [Add()] をダブルクリックします。
Add() メソッドが、2 つのパラメーターと共に右ペインに表示されます。
最初のパラメーターに「2」と入力し、2 番目のパラメーターに「3」と入力します。
[呼び出し] をクリックしてメソッドを呼び出します。
既に開いている [イベント ビューアー] ウィンドウに移動します。[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。
[分析] ノードを右クリックし、[最新の情報に更新] をクリックします。
右ペインにイベントが表示されます。
ID が 303 のイベントを探してダブルクリックして開き、内容を確認します。
このイベントは、ICalculator サービスの
Add()
メソッドによって生成されたもので、ペイロードは "2+3=5" になります。
クリーンアップするには (省略可能)
イベント ビューアーを開きます。
[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows] の順に選択して [アプリケーション サーバー - アプリケーション] に移動します。[分析] を右クリックし、[ログの無効化] を選択します。
[イベント ビューアー]、[アプリケーションとサービス ログ]、[Microsoft]、[Windows]、[アプリケーション サーバー - アプリケーション] の順に選択して [分析] に移動します。[分析] を右クリックし、[ログのクリア] を選択します。
[クリア] をクリックしてログをクリアします。
既知の問題
イベント ビューアーの既知の問題により、ETW イベントをデコードできない場合があります。その場合、"ソース "Microsoft-Windows-Application Server-Applications" からのイベント ID <id> の説明が見つかりません。このイベントを発生させるコンポーネントがローカル コンピューターにインストールされていないか、インストールが壊れています。ローカル コンピューターにコンポーネントをインストールするか、コンポーネントを修復してください。" というエラー メッセージが表示されます。このエラーが発生した場合は、[操作] メニューの [最新の情報に更新] をクリックしてください。これにより、イベントが正常にデコードされます。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<InstallDrive>:\WF_WCF_Samples
このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。
<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Management\ETWTrace
|