【发布时间】:2009-10-22 16:36:40
【问题描述】:
我更新了现有的 WCF 应用程序以添加 protobuf-net 支持。 基本上,我已经:
在包含我的所有数据对象的程序集中添加了 protobuf-net.dll (.net 3.0) 作为引用。我的服务器和客户端都引用了这个程序集
将 [DataMember] 替换为 [DataMember(Order = x)](使用递增的整数作为 x)
使用 ProtoBehavior 属性更新了我的所有 OperationContract
更新了我的服务参考
从客户端,我在服务器上调用这个方法:
[OperationContract(IsOneWay = false), ProtoBehavior]
ConnectionData Join(string userId, string Password);
ConnectionData 是这样定义的:
[DataContract]
public class ConnectionData
{
[DataMember(Order = 1)]
public ConnectionStatusEnum ConnectionStatus; // this is a normal enum with five elements
// .....
[DataMember(Order = 5)]
public bool MustChangePassword;
}
现在,这是发生了什么:
如果我调试服务器,我看到 ConnectionData 对象已正确初始化并在 Join 方法中返回
如果我调试客户端,我看到我的 Join 调用返回了一个空对象
我已将 WCF 跟踪启用到最大详细程度,服务器日志中没有引起我注意,但在客户端日志文件中我看到了以下警告消息:
System.Runtime.Serialization.ElementIgnored
一个无法识别的元素是 在 XML 中遇到 被忽略的反序列化。
元素http://tempuri.org/:proto
我已经嗅探了我的网络流量,我不怪 protobuf-net 无法反序列化它:
<s:Body><JoinResponse xmlns="http://tempuri.org/"><proto/></JoinResponse></s:Body>
如何进一步解决问题并让 protobuf-net 正确序列化我的消息?
我正在使用 protobuf-net r275
【问题讨论】:
-
现在提供基于配置的支持(根据您的要求):marcgravell.blogspot.com/2009/11/…
标签: .net wcf protobuf-net