通过 Web 服务将文件作为字节数组发送时会产生多少额外开销?

Posted

技术标签:

【中文标题】通过 Web 服务将文件作为字节数组发送时会产生多少额外开销?【英文标题】:How much extra overhead is generated when sending a file over a web service as a byte array? 【发布时间】:2010-09-05 22:11:30 【问题描述】:

question and answer 展示了如何通过 XML Web 服务将文件作为字节数组发送。使用这种方法进行文件传输会产生多少开销?我假设数据看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>
<bytes>
    <byte>16</byte>
    <byte>28</byte>
    <byte>127</byte>
    ...
</bytes>

如果此格式正确,则必须先将字节转换为 UTF-8 字符。这些字符中的每一个分配 8 个字节。字节是以 10、十六进制还是二进制字符存储的?由于 XML 数据和字符编码,文件在发送时看起来要大多少? Web 服务中是否内置了压缩功能?

【问题讨论】:

【参考方案1】:

通常,字节数组作为base64 编码字符串发送,而不是作为标签中的单个字节发送。

http://en.wikipedia.org/wiki/Base64

base64 编码版本大约是原始内容大小的 137%

【讨论】:

【参考方案2】:

我将这种方法用于一些公司内部的 Web 服务,我没有注意到任何严重的减速(但这并不意味着它不存在)。

您可能会使用众多网络流量分析工具中的任何一种来衡量数据的大小,并据此做出判断。

【讨论】:

【参考方案3】:

我不确定所有细节(压缩、编码等),但我通常只使用WireShark 来分析网络流量(同时尝试各种方法),然后您就可以确切地看到它是如何发送的。

例如,如果它被压缩,则数据包的数据块不应作为纯文本读取...但是如果它未压缩,您只会看到纯旧的 xml 文本...就像您在 HTTP 流量中看到的那样,在某些情况下甚至是 FTP。

【讨论】:

【参考方案4】:

为了回应 Kevin 所说的,在 .net Web 服务中,如果您有一个字节数组,默认情况下它会作为 base64 编码字符串发送。您还可以预先指定字节数组的编码。

显然,一旦它到达服务器(或客户端),您需要手动将字符串解码回字节数组,因为不幸的是,这不会自动为您完成。

【讨论】:

【参考方案5】:

主要的性能损失不会来自编码文件的传输,而是服务器必须对文件进行预传输进行编码的处理(除非文件不经常更改并且编码版本可以以某种方式缓存)。

【讨论】:

以上是关于通过 Web 服务将文件作为字节数组发送时会产生多少额外开销?的主要内容,如果未能解决你的问题,请参考以下文章

将文件加载为字节数组,而不在内存中分配它 C#

如何将xml doc作为字节数组发送到soap服务?

通过 BLE 向 MCU 发送字节数组

可以将 Byte[] 数组写入 C# 中的文件吗?

通过 JSON 对象将 Session 对象中的字节数组传递给 Web 服务(Asp.Net 2.0 asmx)

如何将浮点数转换为长度为 4 的字节数组(char* 数组)?