C#客户端访问PHP SOAP WebService,当传输大量文本数据时,可以通过压缩减少网络传输。C#在
System.IO.Compression命名空间下提供了两个类GZipStream 类和DeflateStream类来进行数据的压缩和解压缩。经本人实验,在C#下使用GZipStream压缩的字符串在PHP下使用gzuncompress函数无法解压缩,有人说可以使用gzdecode解开,但本人的PHP不支持gzdecode函数,但有gzencode函数(why?原因未明,据说是PHP的BUG,可能到PHP6才提供此函数)。
C#下使用DeflateStream类压缩文本后,可以在PHP下用gzinflate解压缩。示例代码如下:
[c-sharp]view source
print?
01publicstaticstringCompress(stringtext)
02{
03byte[] buffer = Encoding.UTF8.GetBytes(text);
04MemoryStream ms = newMemoryStream();
05using(DeflateStream zip = newDeflateStream(ms, CompressionMode.Compress, true))
06{
07zip.Write(buffer, 0, buffer.Length);
08}
09ms.Position = 0;
10MemoryStream outStream = newMemoryStream();
11byte[] compressed = newbyte[ms.Length];
12ms.Read(compressed, 0, compressed.Length);
13byte[] gzBuffer = newbyte[compressed.Length + 4];
14System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
15System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
16returnConvert.ToBase64String(gzBuffer);
17}
支持中文,编码为UTF8.