WCF客户端不断言该消息是可序列化的

时间:2012-04-03 09:40:33

标签: wcf serialization datacontractserializer

我正在向WCF服务发送一个对象。客户端和服务端的DataContractSerializer 既不也不知道该对象。 在这种情况下,我希望在客户端获得序列化错误,但相反,客户端的发送成功,我只得到服务的响应(在发送超时之后)。 我检查了WCF跟踪,发现服务器端出现了反序列化故障。

如何强制WCF客户端验证要发送的对象是否可以序列化?

更新: 在尝试在简单场景中重现问题的同时,我设法将其隔离以与“ReliableSession”配置选项相关联。只有在客户端或服务器端启用可靠会话时才会出现此问题。

请参阅此要点进行演示: https://gist.github.com/2291505

1 个答案:

答案 0 :(得分:0)

WCF使用的DataContractSerializer是一个“退出”序列化程序,它会尝试序列化您提供的所有对象,无论它们是否标有[DataContract]属性。阻止它的唯一方法是使用[IgnoreDataMember]属性明确标记对象。

有关DataContractSerializer序列化类型的详细信息,请参阅here

显然你的客户端正在管理序列化OK,否则WCF会出错,但我认为服务器端不期待你发送的东西。你能提供任何错误信息吗?

修改 我怀疑这是因为你发送的是一种未知类型。服务端知道字符串,因此可以成功地对它们进行反序列化,但对Person对象一无所知,因此不知道如何处理它。 (客户端确实知道人是什么,所以可以将其序列化。)

尝试将[ServiceKnownType(typeof(Person))]添加到服务定义中。显然,服务需要访问Person对象才能进行编译。