8

比較的単純なサービスホストプロセス(Service.exe)で自己ホストされているWCFサービスを診断しようとしています。

Service.exe.configを次のように構成しました。

<?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>

結果のsvclogファイルを見ると、多くのトレースイベントがログに記録されており(最初のメッセージのみがログに記録されると予想されていました)、トレースされているメッセージにはメッセージ本文が表示されません(ヘッダーのみ)。

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

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

  <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という名前のソースが重要だと思います-メッセージトレースのドキュメントではそれを見たことがありませんでした...

4

2 に答える 2

6

追加してみてください:

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

diagnosticsノードの の下messageLogging

于 2012-06-29T15:16:42.987 に答える
3

サービス構成エディターの Diagnostics->MessageLogging でLogEntireMessageを true に設定します。

于 2013-03-14T21:33:53.630 に答える