6

私が構築しているアプリケーションは、いくつかの 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 と警告レベルのログが有効になっています。

4

1 に答える 1

2

これを試して

<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(),"http://opia.api.translink.com.au/ApiLocationService/2012/04/IApiLocationService/ResolveInputServiceFaultFault")]
      </add>
    </filters> 

アクション フィルターのテキスト "MyServiceA" を MessageLogTraceRecord > Action の URL に置き換えました。

于 2012-10-05T00:49:17.653 に答える