2011-09-08 55 views
3

我有一个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> 

在生成的日志文件,我得到的出站消息记录,然后异常记录。我从来没有看到传入的消息。我在这里做错了什么?

+0

可以尝试使用“秩序”参数中的数据成员的属性。如果出于某种原因,在序列化/反序列化过程中元素会混淆,这应该是照顾它的。例如:'[DataMember(Order = 1)] public string Something {get;组; }'这可能有帮助。 – Vex

+0

我不想解决反序列化错误(事实上,它已经解决了......),我正在寻求解决日志记录问题。 – Mark

+0

您是否尝试将'switchValue'更改为''All“'并查看消息是否被记录? – sinelaw

回答

-1

看来问题与您的服务和客户端之间的泛滥数据有关。

请参考我的文章here

+0

你有任何证据吗?信息并不大,只有一个。 – Mark