我在服务器上托管了一些服务。一个服务将ZIP文件传输到客户端~2kB。另一个传输数据集~10kB的xml表示。其他人只是传输少量数据〜<1kB。文件传输服务和数据集服务将来可能会增加。
如果我只使用MTOM编码的一个绑定对所有这三个服务使用一个绑定,会不会有任何损害? WCF / MTOM是否足够智能以了解何时进行优化?
答案 0 :(得分:1)
如果启用了MTOM,则除非发送的消息超过一定大小,否则WCF将不会使用它。所以,是的,您可以在不影响小消息的情况下启用它。我还没有找到说明这个尺寸的文档。
值得注意的是,MTOM仅适用于二进制数据(即:字节数组)。如果你要返回一个获得XML序列化的类,MTOM不太可能帮助你。根据我的经验,即使返回一个1000个自定义类的数组仍然作为XML文本发送。所以对于你要回来的东西,我不确定你会获得什么。 Marc Gravell的回答讨论了如何通过将DataSet转换为字节数组来解决这个问题。
答案 1 :(得分:0)
您不太可能注意到在此处启用MTOM会产生任何负面影响;实际上,不考虑在网络服务上使用DataSet
的保留,这里的另一个选择是将DataSet
作为二进制文件发送(使用MTOM)-by:
byte[]
DataSet
的{{3}}设置为二进制
BinaryFormatter
将其序列化为MemoryStream
MemoryStream.ToArray()
获取byte[]
比XML版本小得多,MTOM可以利用它
当我RemotingFormat时,二进制远程处理格式占用xml版本占用空间的大约20%,对于完全相同的数据。