2016-02-24 48 views
1

我试图压缩输出流为我的WCF服务,但由于某种原因,当我压缩并返回压缩流时,我得到空响应,虽然当我检查磁盘时,我看到压缩文件存在。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; 
    } 
+0

我找到了这篇文章。我不知道它是否可以帮助你,因为我看到你正在返回一个FileStream。 [FileStream不可序列化](http://stackoverflow.com/questions/19918099/filestream-is-not-marked-as-serializable-but-the-whole-class-is) –

回答

0

问题是实际上它没有它写磁盘,直到我关闭了流,所以我不得不关闭该流,然后重新打开的文件流压缩文件