我是WCF和SOAP消息的新手,但我已经设法组建了一个相当不错的客户端,我用它来从媒体组织下载新闻报道。我已经生成了代理类,显然抽象了很多,这意味着我基本上只是创建对象,调用方法和迭代结果。
我的问题是我有关于Web服务调用应该是什么样子的原始XML示例,我希望能够将这些调用与我正在进行的调用进行“比较”。基本上我需要确保我正在进行的调用与用于测试目的的示例XML文件相同。
我所要求的是有道理的,还是我以错误的方式解决这个问题?如果我遗漏了任何必要的信息,请告诉我,我可以查看段落,但不确定哪些信息是相关的。
答案 0 :(得分:10)
您可以使用WCF跟踪来记录原始XML消息。以下是.config
启用WCF跟踪原始消息日志记录:
<configuration>
<system.serviceModel>
<diagnostics>
<messageLogging maxMessagesToLog="30000"
logEntireMessage="true"
logMessagesAtServiceLevel="true"
logMalformedMessages="true"
logMessagesAtTransportLevel="true">
</messageLogging>
</diagnostics>
</system.serviceModel>
<system.diagnostics>
<sources>
<source name="System.IdentityModel" switchValue="Verbose" logKnownPii="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<!-- Log all messages in the 'Messages' tab of SvcTraceViewer. -->
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml" />
</listeners>
</source>
<!-- ActivityTracing and propogateActivity are used to flesh out the 'Activities' tab in
SvcTraceViewer to aid debugging. -->
<source name="System.ServiceModel" switchValue="Error, ActivityTracing" propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<!-- This records Microsoft.IdentityModel generated traces, including exceptions thrown
from the framework. -->
<source name="Microsoft.IdentityModel" switchValue="Warning">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.e2e" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
您可以从MSDN: Configuring Tracing了解有关WCF跟踪的更多信息。
Microsoft提供Service Trace Viewer Tool来读取.svclog文件。
确保您的服务可以写入initializeData
中定义的路径。
答案 1 :(得分:2)
您是否使用过Microsoft的服务跟踪查看器工具? This MSDN page将为您提供有关如何使用它的详细信息。
答案 2 :(得分:2)
对此的回答是使用fiddler作为代理 - 这样您就可以查看客户端与服务之间的传出和传入消息。
还不能说出个人经验,但是为我开发的团队成员(在以前的生活中) - 非常正确地 - 编写了我们的服务包装器,内置支持明确使用代理 简化fiddler的使用。
答案 3 :(得分:0)
您可以使用IClientMessageInspector界面创建自己的消息检查器,并获取请求和响应的原始消息。
这是关于如何做到这一点的好帖子==&gt; http://www.keithelder.net/blog/archive/2008/01/15/How-to-Get-Around-WCFs-Lack-of-a-Preview-Web.aspx
答案 4 :(得分:0)
我对WCF了解不多,但您可以将连接重定向到网络上记录身体某处的其他Web服务器。这将允许您准确查看您要发送的内容,但需要一些基础架构工作。这可能是在您的开发计算机上运行的Web服务器。