2011-08-22 54 views
2

我目前在.Net 3.5中有几个WCF服务,它通过NetTCP绑定与客户端进行通信。我们从WsHTTP绑定切换到NetTCP,以减少客户端和服务器之间的数据流量(NetTCP har二进制编码传输)。WCF中的二进制序列化NetTCPBinding

我们对结果并不满意(在我们的测试中只减少了30%),并且希望使用二进制序列化器而不是默认的xml序列化对象。

这会减少有效载荷吗?如何在WCF中实现二进制序列化?我们使用输入的数据集作为传输对象..

回答

4

绝对没有讽刺意图,但您应该认真考虑使用普通对象而不是数据集的服务的数据合同。强类型的数据集对象可能非常复杂(只需查看后面的代码),并且它的任何序列化都将非常庞大,尺寸明智。 NetTcpBinding已经使用了一个应该产生更小负载的二进制串行器。另外,如果您尝试创建可查询/灵活的服务层,请使用resource-based service architecture来代替。

如果认为您可以改进Microsoft的二进制编码器netTcpBinding,请参阅此MSDN post中引用的示例代码以开始使用。

+1

你好,谢谢。该项目完全锁定使用强类型数据集,所以这不是一个选项。你确定NetTCPBinding使用二进制串行器吗?我知道序列化的对象是用二进制编码传输的,但我认为这些对象是正常序列化的(xml)? – Martin

+0

我现在没有时间来验证这一点,但我相信netTcpBinding使用**二进制** XML序列化格式[在此MSDN文章中记录。](http://msdn.microsoft.com/en-us /library/cc219210(v=PROT.10).aspx)如果你正在考虑滚动你自己的序列化格式,肯定会检查该文档。这[MSDN博客文章](http://blogs.msdn.com/b/carlosfigueira/archive/2011/03/29/wcf-extensibility-icontractbehavior.aspx)会让你开始了这条路线。祝你好运! –