【问题标题】:how to get WCF WS client to log requests and responses by app.config tracing?如何让 WCF WS 客户端通过 app.config 跟踪记录请求和响应?
【发布时间】:2014-06-05 21:29:31
【问题描述】:

我的 app.config 如下。但是 C:\temp\xxx\ 文件夹中没有任何内容。我错过了什么?这是我第一次尝试这个,所以我对此一无所知。代码中没有任何内容。我认为尝试做一些事情,因为如果我将响应格式化(换行符和制表符),响应会导致异常。我使用soapUI模拟服务返回响应。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
        propagateActivity="true">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelTraceListener">
            <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:\temp\xxx\App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
        <filter type="" />
      </add>
      <add initializeData="C:\temp\xxx\App_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
        <filter type="" />
      </add>
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>
  <system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true"
        logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
  </system.serviceModel>
</configuration>

【问题讨论】:

    标签: .net wcf app-config trace


    【解决方案1】:

    您的配置看起来不错,请注意您必须在添加日志后重新启动服务。确保该服务具有创建日志文件所需的所有权限

    这是我的配置文件版本

    <system.diagnostics>
        <sources>
            <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>
            <source propagateActivity="true" name="System.ServiceModel" switchValue="Warning,ActivityTracing">
                <listeners>
                    <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                        <filter type="" />
                    </add>
                    <add name="ServiceModelTraceListener">
                        <filter type="" />
                    </add>
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add initializeData="app_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                name="ServiceModelMessageLoggingListener" traceOutputOptions="DateTime, Timestamp, ThreadId">
                <filter type="" />
            </add>
            <add initializeData="app_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                name="ServiceModelTraceListener" traceOutputOptions="DateTime, Timestamp">
                <filter type="" />
            </add>
        </sharedListeners>
        <trace autoflush="true" />
    </system.diagnostics>
    <system.serviceModel>
        <diagnostics wmiProviderEnabled="false">
            <messageLogging logMalformedMessages="true" logMessagesAtTransportLevel="true" />
        </diagnostics>
        <services>
            <service name="Nelibur.ServiceModel.Services.JsonServicePerCall">
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:9095/feedback" />
                    </baseAddresses>
                </host>
                <endpoint binding="webHttpBinding"
                          contract="Nelibur.ServiceModel.Contracts.IJsonService" />
            </service>
        </services>
    </system.serviceModel>
    

    【讨论】:

    • 谢谢。我用这个编辑器创建了它。有“不应该 b”权限问题,但我再试一次,当我有更多时间时阅读你的版本。
    • 所以我强调这是客户端的app.config。似乎出于某种原因我有 Version=2.0.0.0
    【解决方案2】:

    我的 WS 客户端是根据 MainProgram.exe 使用的 WSClient.dll 构建的。在构建中,我将 WSClient 项目的 App.config 转换为 WSClient.dll.config。我认为这没关系。但是,它必须复制到 MainProgram.exe.config 并且它可以工作。

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 2021-11-15
      • 2011-02-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2021-10-16
      • 2012-09-15
      • 2015-04-19
      相关资源
      最近更新 更多