大型二进制文件通过asmx web服务传输

3

我正在通过经典的asmx web服务传输一个大的压缩文本文件。

我这样做的原因是该文件未压缩时大小为20 MB,压缩后为4MB。

以下是具体方法,如需更多信息请告知。

    [WebMethod]
    public byte[] Transfer()
    {
        return File.ReadAllBytes(@"4MBFile.zip");
    }

我正在使用C#和.NET 4。(我将项目的初始设置从2.0更改为4.0)。

一个Web方法使用一种序列化方式,所以我猜会有一些开销。

我是否真的只传输了4MB? 如果有任何开销,我该如何测量它?


解释一下踩票会很酷。 - JJ_Jason
尝试运行Fiddler,您应该能够准确地了解您的传输大小。正如CodeCaster所说,这取决于您的WebMethod配置使用哪种协议。 - Vman
我没有给你的问题投反对票,但很可能是因为你的问题不够清晰。你是在问“这样做对吗?”吗? - Kirk Broadhurst
对不起。如何衡量这是否是一个合适的问题。 - JJ_Jason
1
我猜你的答案会是“很容易”。 - JJ_Jason
1个回答

3

XML Web Services通过标准Web协议向Web用户公开有用的功能。在大多数情况下,使用的协议是SOAP。

这个问题显示,ASMX Web服务使用的XmlSerializer默认情况下将二进制数据进行Base64编码,因此会有明显的开销。

我真的只传输了4MB吗?

使用Fiddler监视服务调用,可以获取确切的HTTP响应体大小。

一种解决方案,即将属性设置为hexBinary,因此不会进行Base64编码。


2
你为什么不使用Fiddler来监控服务调用?可能是因为你不知道这种工具的存在,或者不知道它在这里可以直接应用。 - JJ_Jason
所提及的文章表示:“众所周知,base64编码数据会扩展1.33倍于原始大小,而十六进制编码数据则会扩展2倍。”那么为什么hexBinary比base64更好呢?我一定是误解了什么。 - bjdodo
@bjdodo 你是对的,我不知道我在想什么。 - CodeCaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接