2012-06-29 10 views
8

比較的単純なサービスホストプロセス(Service.exe)で自己ホストされているWCFサービスを診断しようとしています。私は結果のsvclogファイルを見るとWCF:メッセージ本文をトレースするにはどうすればよいですか?

<?xml version="1.0" ?> 
<configuration> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="All" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\temp\Service.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
    <system.serviceModel> 
    <diagnostics> 
     <messageLogging maxMessagesToLog="1" 
         maxSizeOfMessageToLog="2147483647" 
         logEntireMessage="true" 
         logMessagesAtServiceLevel="true" 
         logMalformedMessages="true" 
         logMessagesAtTransportLevel="true"> 
     </messageLogging> 
    </diagnostics> 
    </system.serviceModel> 
    <startup> 
    <supportedRuntime version="v4.0" 
         sku=".NETFramework,Version=v4.0" /> 
    </startup> 
</configuration> 

が、私は(私は最初のメッセージが記録されると予想)多くのトレースイベントがログに記録されている参照、および:

私はService.exe.configこのように構成されていますトレースされるメッセージのどれもがメッセージ本体を表示しません(ヘッダーのみ)。

私はここで簡単なものを見逃しているに違いないと確信していますが、私はそれを見ません。

更新:WCF Config Editorを見ると、「Diagnostics」の下に「MessageLogging」と「Tracing」という2つのセクションがあります。私は「EnableMessageLogging」リンクをクリックすると、私のconfigファイルが更新されます:

<system.diagnostics> 
    <sources> 
     <source propagateActivity="true" name="System.ServiceModel" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add initializeData="c:\temp\MessageBodyTracing.svclog" type="System.Diagnostics.XmlWriterTraceListener" 
      name="traceListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="ServiceModelMessageLoggingListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="c:\users\me\documents\visual studio 2010\projects\messagebodytracing\messagebodytracing\app_messages.svclog" 
     type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> 
     <filter type="" /> 
     </add> 
    </sharedListeners> 
    </system.diagnostics> 

は私がSystem.ServiceModel.MessageLoggingというソースがキーだと思います - 私は、メッセージの任意のドキュメントにトレースすることを見たことがなかったです。.. 。あなたの diagnosticsノードで

<endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true" /> 

を、messageLogging下:

+0

でMessageLoggingはなぜ 'maxMessagesToLog = "1"'のですか?それは目的ですか? –

+0

はい、セクションのANYTHINGが有効になっているかどうかを確認したかったので、表示されませんでした。 – lesscode

答えて

6

追加してみてください。 Diagnostics-下trueに

+0

役に立たなかった私は新しいWCFサービスライブラリプロジェクトを作成するときに得られる "Hello World"サービスでこれを試してみましたが、そこにログされたメッセージ本文も取得しません。混乱している。 – lesscode

+0

VSからWCF設定エディタを使用しようとしましたが、あなたのサービスの.configのために生成されたものを見ましたか? –

+0

ああ、そうです。更新された質問を参照してください – lesscode

3

設定しLogEntireMessage>サービスコンフィギュレーションエディタ

+4

これは単に "...ストリーム..."をビューアに表示するようにします –

+1

@Joe Phillips TransferModeはStreamingに設定されています。トレースは、TransferModeをBufferedに設定する場合にのみ機能します。設定を変更する必要があります。 –

関連する問題