WCF 日志记录不记录 SOAP 请求

WCF logging not logging SOAP request

我知道这个问题已经被问过很多次了,我可能已经阅读了所有的内容,包括 MSDN 的。看起来我的情况有点不同。我想我已经设置了所有内容,包括 system.serviceModel 节点、system.diagnostics 和权限。但它只记录显示 "Get configuration section" 的那个。我想要的是我传递给 Web 服务的 XML(包括安全性 headers)。它生成了 svclog 文件所以看起来我有权限(在我授予每个人完全访问权限之后)但它只包含这个:

这是我的配置

<source propagateActivity="true" name="System.ServiceModel" switchValue="Information, ActivityTracing">
    <listeners>
      <add name="ServiceModelMessageLoggingListener" />
    </listeners>
  </source>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
      <add name="ServiceModelMessageLoggingListener" />
    </listeners>
  </source>
</sources>
<sharedListeners>
  <add initializeData="c:\logs\Traces.svclog" type="System.Diagnostics.XmlWriterTraceListener"
    name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
  </add>
</sharedListeners>

<system.serviceModel>
<services>
  <service name="System.ServiceModel">
    <endpoint address="<webservice url>" binding="basicHttpBinding" contract="<contract name from ServiceContractAttribute>"></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  />
  </service>
</services>
<diagnostics>
  <messageLogging logEntireMessage="true" logKnownPii="true" logMalformedMessages="true"
    logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
  <endToEndTracing propagateActivity="true" activityTracing="true"
    messageFlowTracing="true" />
</diagnostics>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

花了一整天时间调整配置和权限。我还能缺少什么?

请参考以下配置记录服务器日志(原理同客户端)。
因为WCF的tracing技术是基于Dotnet平台的,所以要先配置tracing source

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add type="System.Diagnostics.XmlWriterTraceListener" name="xmlLog" initializeData="myLogs.svclog"/>
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
  <system.serviceModel>
    <services>
      <service name="WcfLogSample.Service1">
        <endpoint address="" binding="basicHttpBinding" contract="WcfLogSample.IService1"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" />
    </diagnostics>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

客户端调用完成后,服务器会记录通信,需要重启IIS查看根目录下的日志。

以下是一些参考,希望对你有所帮助。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/tracing-and-message-logging
https://docs.microsoft.com/en-us/dotnet/framework/wcf/diagnostics/tracing/configuring-tracing

更新:
请在客户端使用我的以下配置。

      <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add type="System.Diagnostics.XmlWriterTraceListener" name="xmlLog" initializeData="myLogs.svclog"/>
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
    <system.serviceModel>
      <diagnostics>
        <messageLogging logEntireMessage="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" />
      </diagnostics>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://10.157.13.70:8733/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>

结果。

如果有什么我可以帮忙的,请随时告诉我。