什么是最简单的方法来加压缩周转Silverlight?
-
08-06-2019 - |
题
我有一个silverlight2beta2应用程序访问WCF网服务。为此,它目前只能使用basicHttp结合。该服务将回报相当大数额的XML数据。这似乎是相当浪费从一个带宽使用率的角度来看,作为响应,如果拉链,就可以通过较小的系数为5(实际上我贴的响应成txt文件和压缩。).
该请求不会有"Accept-Encoding:gzip,deflate"-是否有任何方式有WCF服务gzip(或无压缩)的反应?
我没有找到这个 链接 但它确实似乎有点复杂的功能,应该处理的框恕我直言。
确定-我首先标志着解决方案使用的系统。IO.压缩作为回答,因为我可能永远不会"看起来",以获得IIS7动态压缩工作。好了,因为事实证明:
动态压缩在IIS7 是 工作al沿。它只是Nikhil的网页开发人员助手的插件对于即没有显示出它的工作。我的猜测是由于SL手中的网服务电话关的浏览器,这浏览器处理"下面"和Nikhil的工具永远看不到压缩的响应。我能够确认这一点通过使用小提琴手,监督业务的外部浏览器应用程序。在小提琴手,响应,事实上,gzip compressed!!
其他问题的系统。IO.压缩的方案是,系统。IO.压不存在控CLR。
所以从我的角度来看,最简单的方法使WCF压缩在统启动态压缩在IIS7并没有写代码。
解决方案
如果您使用的是IIS7,看一看 压缩模块.这可以让你配置压缩HTTP请求到服务器。
其他提示
我没有看到一个地方WCF做压缩的时候做WCF项目。我只是使用的系统。IO.压缩的名字空间和作出了快速的压缩机。这里的代码,我在使用
public static class CompressedSerializer
{
/// <summary>
/// Decompresses the specified compressed data.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="compressedData">The compressed data.</param>
/// <returns></returns>
public static T Decompress<T>(byte[] compressedData) where T : class
{
T result = null;
using (MemoryStream memory = new MemoryStream())
{
memory.Write(compressedData, 0, compressedData.Length);
memory.Position = 0L;
using (GZipStream zip= new GZipStream(memory, CompressionMode.Decompress, true))
{
zip.Flush();
var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
result = formatter.Deserialize(zip) as T;
}
}
return result;
}
/// <summary>
/// Compresses the specified data.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data">The data.</param>
/// <returns></returns>
public static byte[] Compress<T>(T data)
{
byte[] result = null;
using (MemoryStream memory = new MemoryStream())
{
using (GZipStream zip= new GZipStream(memory, CompressionMode.Compress, true))
{
var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(zip, data);
}
result = memory.ToArray();
}
return result;
}
}
然后我只是我的服务需要在一个字节列作为一个输入,像这样
void ReceiveData(byte[] data);
工作很适合我。
还应当指出,可能需要添加mime类型 applicationHost.config
下 <httpCompression><dynamicTypes>
部分除了启用压缩站:
<add mimeType="application/soap+msbin1" enabled="true" />
如果某些动态的反应是不会被压缩(和一些)它可能是一个mime类型的问题。使用小提琴手得到的具体情况相关的请求。失败的请求跟踪可能是有用的,在确定是否IIS甚至试图压缩的响应。如果压缩配置是否正确你将会看到一个 NO_MATCHING_CONTENT_TYPE
在 完整的痕迹 部分的跟踪产出。