WCF日志记录未记录SOAP请求

时间:2019-07-03 22:55:03

标签: xml wcf logging soap system.diagnostics

我知道这个问题已经被问过多次了,我可能已经读过所有这些,包括MSDN。看来我的情况有点不同。我认为我已经设置了包括system.serviceModel节点,system.diagnostics和权限在内的所有内容。但是,它仅记录显示“获取配置部分”的内容。我想要的是我传递给Web服务的XML(包括安全标头)。它生成了svclog文件,因此看起来我有权限(在我授予所有人的完全访问权限之后),但它仅包含以下内容:

enter image description here

这是我的配置

<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" />

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

1 个答案:

答案 0 :(得分:1)

请参考以下配置来重新编码服务器日志(原理与客户端相同)。
由于WCF的跟踪技术基于Dotnet平台,因此应首先配置跟踪源。

<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以检查位于根目录中的日志。
enter image description here
这里有一些参考资料,希望对您有帮助。
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>

结果。
enter image description here
随时让我知道是否有什么可以帮助您的。