我正在向我的webservice(.asmx)发送一个XMLDocument,当我通过xmldocument.outerxml.tostring()检查xmldocumetn的文件大小时,它的长度大约为433434(我不知道它代表什么... 。是以字节为单位) 所以我想从客户端压缩这些数据并将其发送到webservice而不将文件保存为本地硬盘中的XML。 任何人都可以对此有所了解...... 在此先感谢
答案 0 :(得分: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
答案 1 :(得分:0)
您可能想要调查System.IO.Compression.GZipStream。您的Web服务需要知道使用相同的类解压缩它。
答案 2 :(得分:0)
在压缩之前和之后做一些基准测试。您可能会发现管道每端的压缩/解压缩会比通过从有效负载中截取一些字节所节省的时间增加更多的时间。你需要找到最好的地方,在这里,压缩可以节省你比花费更多的时间(1/2一MB,特别是在局域网上,不是很多流量,除非你真的抽出那些xml文件)。
答案 3 :(得分:0)
我以前在.NET压缩库方面遇到过一些不好的经历,所以我建议SharpZipLib。您需要更改网络方法实施以接受byte[]
;
您还可以使用TCP绑定将该服务作为WCF服务访问,因此它将消耗更少的带宽。在弄乱Web方法签名之前,您应该考虑这个选项。