您的位置:首页 > 其它

如何减少上传到webservice的内容长度

2010-01-05 15:28 148 查看
假设我有一个方法,

[WebMethod]
public string DoCommand(string pCommandName,string pParameter)
{
    return "ER|建议中";
}
他做很多的工作。并会根据pCommandName的不同来使用pParameter,pParameter有可能是一个对象的XML序列化的字符串。当一个对象很大时,如一个集合,我很担心上传的流量。我想到了压缩、二进制序列化、字节来改动上面的方法。

首先尝试改为字节参数

[WebMethod]
public string DoCommand(string pCommandName,byte[] pParameter)
{
    return "ER|建议中";
}
使用TCP跟踪器,发现pParameter传送的base64的字符串,看来是框架自己加了处理。好了,那就看看压缩XML字符串和二进制序列化的比较了。//测试数据
List<EntityTest> ens = new List<EntityTest>();
for (int i = 0; i < 50; i++)
    ens.Add(new EntityTest());
//转换为字符
string xmlStr = XmlSeriTool.Serialize(ens);
string binStr = ZipTools.GetBinaryBase64(ens);
string xmlDstr = ZipTools.GZipCompress(xmlStr);
string binDstr = ZipTools.GZipCompress(binStr);
this.richTextBox1.AppendText(string.Format("XML字长:{0}\nBIN字长:{1}\n压缩XML字长:{2}\n压缩BIN字长:{3}",
    xmlStr.Length, 
    binStr.Length, 
    xmlDstr.Length, 
    binDstr.Length));
结果很有意思,如下:

XML字长:13280
BIN字长:9252
压缩XML字长:4868
压缩BIN字长:7024将对象序列化为XML的长度最长。先将对象执行二进制序列化,再取字节的Base64字符的长度,比直接XML序列化短2000多字。但把这两个字符用zip压缩后,两者都短了,但XML的字符更短!

我很乐意看到这个结果,毕竟使用XML序列化灵活一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐