私が構築しているアプリケーションは、いくつかの WCF サービス (A、B) を公開しています。内部的には、内部ネットワーク (X、Y) で実行されている他のいくつかの WCF サービスを消費します。
WCF メッセージ ログを使用して、サービス A、B とそれらを呼び出す外部クライアントの間のトラフィック のみをログに記録したいと考えています。
サービス (A、B) とバックエンド サービス (X、Y) の間のデータは、WCF によってログに記録されません。
system.serviceModel/diagnostics/messageLogging/filters によるフィルタリングは、次の場合に部分的に成功しました。
<filters>
<add nodeQuota="10" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
/s:Envelope/s:Header/*[contains(text(),"MyServiceA")]
</add>
<add nodeQuota="10" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">
/s:Envelope/s:Header/a:Action[contains(text(),"MyServiceA")]
</add>
</filters>
ただし、SOAP応答にはフィルタリングするテキストが含まれていないため、これはサービスからの応答をキャプチャできません。
WCF MessageLogTraceRecordには SOAP アクションが含まれていますが、それにアクセスするためのフィルターを作成できないようです。
<MessageLogTraceRecord>
<Addressing xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace>
<Action>http://opia.api.translink.com.au/ApiLocationService/2012/04/IApiLocationService/ResolveInputServiceFaultFault</Action>
</Addressing>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
...
すべてのオプションを true に設定すると、WCF メッセージ ログとエンド ツー エンドのトレースが有効になります。ActivityTracing と警告レベルのログが有効になっています。