WCF 在压缩时返回空蒸汽

Posted

技术标签:

【中文标题】WCF 在压缩时返回空蒸汽【英文标题】:WCF returns empty steam on compression 【发布时间】:2016-02-24 14:21:11 【问题描述】:

我正在尝试为我的 WCF 服务压缩输出流,但由于某种原因,当我压缩并返回压缩流时,我得到空响应,尽管当我检查磁盘时,我看到压缩文件确实存在。

进行压缩的方法:

public static Stream CompressResponseStream(FileStream stream,string filename, HttpContext context = null)
    
        if (context == null)
            context = HttpContext.Current;

        string encodings = context.Request.Headers.Get("Accept-Encoding");

        if (!string.IsNullOrEmpty(encodings))
        
            encodings = encodings.ToLowerInvariant();

            if (encodings.Contains("deflate"))
            
                using (FileStream fs = File.OpenWrite($"filename.gzip"))
                using (var deflateStream = new DeflateStream(fs, CompressionMode.Compress))
                
                    stream.CopyTo(deflateStream);
                    context.Response.AppendHeader("Content-Encoding", "deflate");
                    context.Response.AppendHeader("X-CompressResponseStream", "deflate");
                    fs.Flush();
                    return fs;
                
            
            else if (encodings.Contains("gzip"))
            
                FileStream fs = new FileStream($"filename.gzip", FileMode.Create, FileAccess.ReadWrite);
                using (var gZipStream = new GZipStream(fs, CompressionMode.Compress))
                
                    stream.CopyTo(gZipStream);
                    context.Response.AppendHeader("Content-Encoding", "gzip");
                    context.Response.AppendHeader("X-CompressResponseStream", "gzip");
                    fs.Flush();
                    return fs;
                
            
            else
            
                context.Response.AppendHeader("X-CompressResponseStream", "no-known-accept");
            
        
        return stream;
    

【问题讨论】:

我找到了这篇文章。我不知道它是否对您有帮助,因为我看到您正在返回 FileStream。 A FileStream is not serializable 【参考方案1】:

问题实际上是在我关闭流之前它没有将它写入磁盘,所以我不得不关闭流然后重新打开压缩文件的文件流

【讨论】:

以上是关于WCF 在压缩时返回空蒸汽的主要内容,如果未能解决你的问题,请参考以下文章

WCF消息压缩

WCF 服务发送 .txt 或 .xls 但不发送 .gz(压缩文件)

WCF传输1-你是否使用过压缩或Json序列化?

WCF传输1-你是否使用过压缩或Json序列化?

带压缩的 WCF 消息安全性

打开不支持的压缩类型的 zipfile 静默返回空文件流,而不是抛出异常