【问题标题】:Client side tracing for ASMX web serviceASMX Web 服务的客户端跟踪
【发布时间】:2014-07-04 01:00:21
【问题描述】:

我正在尝试记录我的应用程序(客户端)向旧的 ASMX Web 服务发出的 SOAP 请求。

然后我想使用 SvcTraceViewer 工具查看这些消息(就像在 WCF 中一样)。正在创建日志文件,但我似乎找不到正确的配置设置,因此我可以看到这些消息。

我的 system.diagnostics 设置是:

<system.diagnostics>
    <trace autoflush="true"/>
    <sources>
        <source name="System.Net" maxdatasize="1024">
            <listeners>
                <add name="TraceFile"/>
            </listeners>
        </source>
        <source name="System.Net.Sockets" maxdatasize="1024">
            <listeners>
                <add name="TraceFile"/>
            </listeners>
        </source>
        <source name="System.Net.Http">
            <listeners>
                <add name="TraceFile"/>
            </listeners>
        </source>
        <source name="System.Web.Services.Asmx">
            <listeners>
                <add name="TraceFile"/>
            </listeners>
        </source>
    </sources>
    <sharedListeners>
        <add name="TraceFile" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.svclog"/>
    </sharedListeners>
    <switches>
        <add name="System.Net" value="Verbose"/>
        <add name="System.Net.Sockets" value="Verbose"/>
        <add name="System.Net.Http" value="Verbose"/>
        <add name="System.Web.Services.Asmx" value="Verbose"  />
    </switches>
</system.diagnostics>

我可以看到单个数据包(我假设来自 System.Net,每个数据包都包含消息的一部分,但没有一个地方可以轻松提取该消息。

在 ASMX 中记录服务器上的入站消息很容易:

<microsoft.web.services>
    <!-- Set the enabled attribute to "true" for input and output tracing -->
    <diagnostics>
        <trace enabled="true" input="InputTrace.webinfo" output="OutputTrace.webinfo" />
    </diagnostics>
</microsoft.web.services>

但是记录客户端请求似乎相当具有挑战性。 WCF 有 ServiceModel.Diagnostics Messaging 配置,但我找不到任何可与 AMSX Web 服务相媲美的东西。

<system.diagnostics>
<sources>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
             <add name="messages"
             type="System.Diagnostics.XmlWriterTraceListener"
             initializeData="c:\logs\messages.svclog" />
      </listeners>
  </source>
</sources>
</system.diagnostics>

<system.serviceModel>
<diagnostics>
<messageLogging 
     logEntireMessage="true" 
     logMalformedMessages="false"
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false"
     maxMessagesToLog="3000"
     maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>

我真的必须写一个SoapExtension 来在客户端记录消息,还是我缺少一个简单的配置设置?

【问题讨论】:

    标签: asp.net web-services soap asmx


    【解决方案1】:

    也许您应该使用以下示例进行客户端日志记录:

    http://msdn.microsoft.com/en-us/library/vstudio/bb885203(v=vs.100).aspx

    在客户端,跟踪点如下:

    • 请求序列化前后
    • GetWebResponse 之前和之后
    • 响应反序列化前后
    • XmlSerializer 创建前后

    【讨论】:

    • 从我上面的笔记可以看出,我已经在做这个了。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2016-07-07
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多