我有一个WCF客户端使用[DataContract]
类型的一个WCF服务进行通信,并且我得到一个序列化错误:为什么我的无效WCF消息被记录?
The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://www.example.com/2007/09/Example:ExampleResult . The InnerException message was 'Deserialized object with reference id 'i3' not found in stream.'. Please see InnerException for more details.
通常情况下,我会简单地杀青跟踪,看看到底发生了什么,但在这种情况下,我无法获得在日志中出现的违规(响应)消息。
我的配置是这样的:
<system.serviceModel>
... (more stuff)
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true"
logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true"
maxMessagesToLog="10000" maxSizeOfMessageToLog="81920000" />
</diagnostics>
</system.serviceModel>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="wcf_listener" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="wcf_listener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="wcf_listener" initializeData="tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener" />
</sharedListeners>
</system.diagnostics>
在生成的日志文件,我得到的出站消息记录,然后异常记录。我从来没有看到传入的消息。我在这里做错了什么?
可以尝试使用“秩序”参数中的数据成员的属性。如果出于某种原因,在序列化/反序列化过程中元素会混淆,这应该是照顾它的。例如:'[DataMember(Order = 1)] public string Something {get;组; }'这可能有帮助。 – Vex
我不想解决反序列化错误(事实上,它已经解决了......),我正在寻求解决日志记录问题。 – Mark
您是否尝试将'switchValue'更改为''All“'并查看消息是否被记录? – sinelaw