将MTOM用于小尺寸xml数据会影响性能吗?

时间:2011-02-18 20:48:50

标签: .net wcf

我在服务器上托管了一些服务。一个服务将ZIP文件传输到客户端~2kB。另一个传输数据集~10kB的xml表示。其他人只是传输少量数据〜<1kB。文件传输服务和数据集服务将来可能会增加。

如果我只使用MTOM编码的一个绑定对所有这三个服务使用一个绑定,会不会有任何损害? WCF / MTOM是否足够智能以了解何时进行优化?

2 个答案:

答案 0 :(得分:1)

如果启用了MTOM,则除非发送的消息超过一定大小,否则WCF将不会使用它。所以,是的,您可以在不影响小消息的情况下启用它。我还没有找到说明这个尺寸的文档。

值得注意的是,MTOM仅适用于二进制数据(即:字节数组)。如果你要返回一个获得XML序列化的类,MTOM不太可能帮助你。根据我的经验,即使返回一个1000个自定义类的数组仍然作为XML文本发送。所以对于你要回来的东西,我不确定你会获得什么。 Marc Gravell的回答讨论了如何通过将DataSet转换为字节数组来解决这个问题。

答案 1 :(得分:0)

您不太可能注意到在此处启用MTOM会产生任何负面影响;实际上,不考虑在网络服务上使用DataSet的保留,这里的另一个选择是将DataSet作为二进制文件发送(使用MTOM)-by:

  • 将API更改为byte[]
  • 在序列化
  • 之前将DataSet的{​​{3}}设置为二进制
  • 使用BinaryFormatter将其序列化为MemoryStream
  • 使用MemoryStream.ToArray()获取byte[]

比XML版本小得多,MTOM可以利用它

当我RemotingFormat时,二进制远程处理格式占用xml版本占用空间的大约20%,对于完全相同的数据。