2010-02-01 50 views
2

我发送一个XMLDocument到我的webservice(.asmx),当我通过xmldocument.outerxml.tostring()检查该xmldocumetn的文件大小时,它是来到433434(我不知道什么它代表...它是以字节为单位) 所以我想压缩这个数据从客户端,并将其发送到webservice,而不是在我的本地硬盘上保存为XML文件.. 任何人都可以在这个... 在此先感谢压缩数据发送到Webservice

回答

0

xmldocument.OuterXml.ToString().Length将返回xml字符串的长度,就像"something".Length将返回9.所以不,它不是以字节为单位。

字节的实际大小将取决于你的编码,为例,你可以使用:

System.Text.ASCIIEncoding.Unicode.GetByteCount(s); 
System.Text.ASCIIEncoding.ASCII.GetByteCount(s); 
... 

根据所使用的编码。

EDIT1: 数据量是否显着?假设你通过网络发送它,你有很多选择来在发送之前压缩数据。

您可以使用自己的自定义编码来尽可能减少发送的数据,比如说将常量节点名称索引为“a”,“b”...并在之后发送地图。您也可以尝试以块的形式发送它。

如果文件大小是因为超时的问题,我建议寻找到webservice.timeout财产On MSDN

+0

如何在发送到webservice之前压缩数据? – Sathish 2010-02-01 04:10:02

0

在压缩之前和之后做一些基准测试。您可能会发现,在管道两端的压缩/解压缩比通过从有效负载中剔除一些字节所节省的时间要多得多。你需要找到压缩的最佳位置,比开销节省更多的时间(1/2 MB,特别是在局域网上,流量不是很大,除非你真的抽出这些XML文档)。

0

我以前对.NET压缩库有一些不好的经验,所以我推荐SharpZipLib。你需要改变你的web方法实现来接受byte[];

您也可以使用TCP绑定作为WCF服务访问该服务,因此它将消耗更少的带宽。在与您的Web方法签名混淆之前,您应该考虑此选项。