在ASP.NET中发送压缩响应

时间:2009-06-19 06:24:17

标签: asp.net iis compression

我正在IIS6上运行一个用于ASP.NET应用程序并启用压缩的网站,该网站适用于.aspx网页。

什么不起作用的是下载的二进制文件,它们作为回发响应的一部分传输:例如链接按钮是'download to excel' - 用户点击并且代码生成二进制文件,执行Response.Clear()然后将文件写入Response.OutputStream。

浏览器会看到响应,但它始终为零字节。因此我假设Web浏览器期望压缩响应,并且由于原始二进制文件不是有效的压缩流,因此它失败。我很困惑,如果我已经清除了响应,为什么会这样 - 当然响应头(指定压缩)也被清除了?

因此出现了两个问题:

1)如何压缩二进制文件以发送压缩响应? 2)如何在运行时检查IIS压缩是否已启用?

干杯

1 个答案:

答案 0 :(得分:3)

我会禁用压缩并检查这是否仍然有效,只是为了确定这确实是由于IIS压缩。我告诉你'因为我正在运行一个启用IIS /压缩的站点,它提供PDF文件(二进制)没有问题。

无论如何,这是代码的一部分,对我有用。

 Response.Clear();
 Response.ClearHeaders();

 Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
 Response.AddHeader("Content-Length", fileInfo.Length.ToString());
 Response.AddHeader("Content-transfer-encoding", "8bit");
 Response.AddHeader("Cache-Control", "private");
 Response.AddHeader("Pragma", "cache");
 Response.AddHeader("Expires", "0");  

 Response.ContentType = "application/pdf";
 Response.WriteFile(filePath);

 Response.Flush();
 Response.Close();
 HttpContext.Current.ApplicationInstance.CompleteRequest();