トレースの拡張

ExtendingTracing サンプルでは、ユーザー定義のアクティビティ トレースをクライアントとサービス コードに記述して、Windows Communication Foundation (WCF) トレース機能を拡張する方法を示します。 ユーザー定義のアクティビティ トレースを記述すると、ユーザーはトレース アクティビティを作成し、トレースを作業の論理単位ごとにグループ化することができます。 さらに、転送 (同じエンドポイント内) や伝達 (異なるエンドポイント間) を経由してアクティビティを相互に関連付けることもできます。 このサンプルでは、トレースはクライアントとサービスの両方で有効です。 クライアントとサービスの構成ファイルでトレースを有効にする方法の詳細については、「トレースとメッセージ ログ」を参照してください。

このサンプルは、「入門サンプル」に基づいています。

Note

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

トレースとアクティビティの伝達

ユーザー定義のアクティビティ トレースにより、ユーザー自身のトレース アクティビティを作成できます。これによって、複数のトレースを作業の論理単位ごとにグループ化したり、転送や伝達を経由してアクティビティを相互に関連付けたり、WCF トレースのパフォーマンスの負荷 (ログ ファイルによるディスク領域の負荷など) を軽減したりできます。

カスタム ソースの追加

ユーザー定義のトレースは、クライアントとサービス コードの両方に追加できます。 トレース ソースをクライアントまたはサービスの構成ファイルに追加することで、これらのカスタム トレースを記録し、サービス トレース ビューアー ツール (SvcTraceViewer.exe) に表示することができます。 次のコードは、ServerCalculatorTraceSource というユーザー定義のトレース ソースを構成ファイルに追加する方法を示します。

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
            <listeners>
                <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                    <filter type="" />
                </add>
                <add name="xml">
                    <filter type="" />
                </add>
            </listeners>
        </source>
        <source name="ServerCalculatorTraceSource" switchValue="Information,ActivityTracing">
            <listeners>
                <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                    <filter type="" />
                </add>
                <add name="xml">
                    <filter type="" />
                </add>
            </listeners>
        </source>
    </sources>
    <sharedListeners>
       <add initializeData="C:\logs\ServerTraces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
        name="xml" traceOutputOptions="Callstack">
            <filter type="" />
        </add>
    </sharedListeners>
    <trace autoflush="true" />
</system.diagnostics>
....

アクティビティの関連付け

エンドポイント間でアクティビティを直接関連付けるには、propagateActivity トレース ソースの true 属性を System.ServiceModel に設定する必要があります。 また、WCF アクティビティを経由せずにトレースを伝達するには、ServiceModel アクティビティ トレースをオフにする必要があります。 次のコード サンプルを参照してください。

Note

ServiceModel アクティビティ トレースをオフにすることは、switchValue プロパティが表すトレース レベルをオフにすることとは異なります。

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">

    ...

       </source>
    </sources>
</system.diagnostics>

パフォーマンス コストの軽減

ActivityTracing トレース ソースの System.ServiceModel をオフに設定すると、ユーザー定義のアクティビティ トレースのみを含み、ServiceModel アクティビティ トレースは含まないトレース ファイルが生成されます。 ServiceModel アクティビティ トレースを除外すると、ログ ファイルが大幅に小さくなります。 ただし、WCF 処理トレースを関連付ける機会は失われます。

サンプルをセットアップ、ビルド、実行する

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順を実行したことを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。

  3. 単一または複数コンピューター構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。

関連項目