ASMX Web服务的客户端跟踪

时间:2014-05-15 14:06:07

标签: asp.net web-services soap asmx

我试图将我的应用程序(客户端)发出的SOAP请求记录到旧的ASMX Web服务中。

然后我想使用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来记录客户端的消息,或者是否有一个我缺少的简单配置设置?

1 个答案:

答案 0 :(得分:0)

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

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

在客户端,跟踪点如下:

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