我正在构建一个Web服务客户端,以便与我的控制之外的(基于java的)远程Web服务进行交互。我可以调用Web服务操作,并通过数据包嗅探告诉服务正在响应填充的数据。但是,当响应进入客户端代码时,响应只是一个shell,所有数据都为null。
我怀疑在Web服务“管道”中发生了一个错误,导致数据被静默删除或忽略,但我找不到启用调试(甚至日志或错误消息?)的方法。在响应我的客户端代码之前收到响应。
我的App.config启用了消息记录,但只记录了外发消息:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
</system.serviceModel>
我真的想在实际解析响应消息期间设置一个断点,但让Message Logger实际记录响应也可能有所帮助。
我还配置了一个自定义MessageEncoder
,它是解决远程服务解析器中的错误所必需的。我可以在ReadMessage
上的MessageEncoder
方法中添加断点,并且可以看到此时数据仍然存在。但是,下一步跳回到客户端代码,并且Response对象为空 - 没有警告或消息。有什么办法可以看出它们之间发生了什么?
所以,我想这最终只是一个由两部分组成的问题:
MessageEncoder
之后,但在发送到客户端代码之前处理? 答案 0 :(得分:6)
以下是如何让响应跟踪为您工作的方法:
<强> 1。构造强>
<system.diagnostics>
<sharedListeners>
<add name="sharedListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\LogFiles\messages.svclog" />
</sharedListeners>
<sources>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" >
<listeners>
<add name="sharedListener" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
<listeners>
<add name="sharedListener" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics performanceCounters="All" wmiProviderEnabled="True">
<messageLogging
logEntireMessage="True"
logMalformedMessages="True"
logMessagesAtServiceLevel="True"
logMessagesAtTransportLevel="True"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="30000"/>
</diagnostics>
</system.serviceModel>
这在配置节点下的app.config / web.config中。
<强> 2。找到答案
快速验证看到您实际从远程服务接收服务响应是在Visual Studio中将日志文件作为xml文件打开并搜索
Source="TransportReceive"
您应该能够在此MessageLogTraceRecord节点中查看远程服务已响应的内容。
第3。模具强>
查看这些消息的推荐工具是SvcTraceViewer.exe
你应该能够在以下任何一个中找到它:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64
或
C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
如果您没有此工具,可以在Windows Sdk
中找到它