WCF 9章診断追加構成オプション

5601 ワード

前のセクションでは、ログの構成と診断の基本的な方法について説明しました.このセクションでは、WCFアプリケーションを構成する際に注意すべき他のいくつかのオプションについて説明します.
共有リスナー
以前の例では、各ソース(メッセージおよびトレース)に一意のリスナーを使用していました.共有リスナーを構成し、複数のソースに接続し、XMLファイルなどの個別要素に出力を統合することを選択できます.リスト9.4は、トレースおよびメッセージ・ログを同じ出力ファイルを使用するように構成する方法を示す.
リスト9.4共有リスナーにメッセージを追跡して記録する
    <system.diagnostics>

        <sources>

            <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"

                propagateActivity="true">

                <listeners>

                    <add type="System.Diagnostics.DefaultTraceListener" name="Default">

                        <filter type="" />

                    </add>

                </listeners>

            </source>

            <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">

                <listeners>

                    <add type="System.Diagnostics.DefaultTraceListener" name="Default">

                        <filter type="" />

                    </add>

                </listeners>

            </source>

        </sources>

        <sharedListeners>

            <add initializeData="App_tracelog.svclog"

                type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

                name="diagnostics" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">

                <filter type="" />

            </add>

        </sharedListeners>

    </system.diagnostics>


各ソースに対して、共有リスナーと一致する名前のリスナーを追加します.この場合、同じdiagnostics.svclogファイルは追跡記録とメッセージを書きます.
メッセージフィルタ
デフォルトでは、構成要素で決定されたすべての階層に関するメッセージが記録されます.しかし、記録時の重複情報を減らし、ログ・ファイルのサイズを減らすには、構成された一連のルールに一致するメッセージだけを減らしたい場合があります.
メッセージフィルタは、メッセージが記録される前に条件を満たさなければならないXPath式です.XPathクエリを満たさないメッセージは、メッセージフィルタによって影響されない深刻なエラーメッセージを除いて除外されます.
リスト9.5に示すように、ノードを追加してフィルタを決定します.
リスト9.5メッセージログにフィルタを追加
      <diagnostics>

            <messageLogging logEntireMessage="true" logMalformedMessages="true"

                logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"

                maxMessagesToLog="4000">

                <filters>

                    <add nodeQuota="1000" 

                         xmlns:s12="http://www.w3.org/2003/05/soap-envelope" 

                         xmlns:wsa10="http://www.w3.org/2003/08/addressing"

                         /s12:Envelope/s12:Header/was10:Action[startswith(text(), 'http://Microsoft.ServiceModel.Samples/ICalculator')]></add>

                </filters>

            </messageLogging>

        </diagnostics>


この例は複雑に見えるかもしれませんが、XPath式で使用されるネーミングスペースを定義するために全体的に使用されます.ネーミングスペースはSOAP封筒とアドレスメタデータのために使用されます.式は、各メッセージのヘッダをチェックして、SelfHost例のICalculatorサービスの1つに転送されることを保証します.他のサービスのメッセージは無視されます.
ソース自動リフレッシュのトレース
各トレース記録またはメッセージ記録操作をトレースのたびに自動的に完了させたい場合は構成ノードの要素では、リスト9.6に示すように自動快適機能がオンになります.
リスト9.6自動リフレッシュ機能をオンにする
<trace autoflush="true" />


自動リフレッシュ機能はデフォルトでオフです.本番環境で自動更新を開始する前に、テスト環境での影響を処理する必要があることを確認します.これは、特にメッセージ転送が増加するため、費用が増加するためです.
パフォーマンスカウンタ
3種類の異なるWCF関連性能カウンタと.NET Framework 3.5を一緒にインストールします.パフォーマンスモニタでは、ServiceModelService、ServiceModelEndpoint、およびServiceModelOperationの下にこれらのカウンタが表示されます.これらを設定することで、リスト9.7に表示するアプリケーションを開くことができます.
リスト9.7パフォーマンスカウンタの更新をオンにします.
<diagnostics performanceCounters="ServiceOnly">

            <messageLogging 

                logMalformedMessages="true" 

                logMessagesAtServiceLevel="false"

                logMessagesAtTransportLevel="true" />

        </diagnostics>


ノードにperformanceCountersプロパティが含まれており、パフォーマンスカウンタを開きます.認証設定はOff(デフォルト)、ServiceOnly、Allです.開発と診断の目的ですべてのパフォーマンス・カウンタをオンにすることを強くお勧めしますが、パフォーマンス・カウンタは多くの費用がかかる操作とともに使用されるため、ServiceOnlyは通常の本番操作で使用することをお勧めします.これは、ServiceModelServiceリストでのみオンになります.
パフォーマンスカウンタを取得するには、WCFサービスまたはクライアントインスタンスを実行して、パフォーマンスモニタアプリケーションにパフォーマンスカウンタを追加する必要があります.パフォーマンスカウンタがプロファイルでサービスを起動し、取得したいカウンタを追加し、クライアントアプリケーションを実行することを確認します.
Windowsデバイス管理(WMI)
WCFは、WMIの設定とステータスを暴露する機能をサポートし、マイクロソフトのオペレーティングマネージャやHP OpenViewなど、多くの一般的なアプリケーションマネージャがWMIを使用して多くの企業間システムにアクセスしています.Windows PowerShellにもWMIをサポートする機能があり、特別な管理と監視シーンのためにカスタムスクリプトプログラムを書くことができます.
リスト9.8のようなプロファイルでWCFアプリケーションのWMIプロバイダサービスを開始できます.
リスト9.8 WMIプロバイダサービスを開く
<diagnostics wmiProviderEnabled="true" 

                     performanceCounters="ServiceOnly">

            <messageLogging logMalformedMessages="true" 

                            logMessagesAtServiceLevel="false"

                            logMessagesAtTransportLevel="true" />

        </diagnostics>


WMIのオンは、オン性能カウンタと同様です.ノードwmiProviderEnabledプロパティを追加します.オンにすると、管理プログラムはWCFアプリケーションを監視して管理できます.