2012-11-13 42 views
3

我有一个ASP.Net 4.0 web应用程序,它在客户端的浏览器上呈现使用CrystalReports通过二进制写入在iFrame中实时创建的PDF。这个webapp在我的开发工作站(Visual Studio 2012 Web Developer)上运行良好,但是当我测试我们的生产服务器(Win2003,IIS6)时,用户点击一个按钮以流式传输PDF的部分仅显示文档的一部分(仅限页面标志,PDF的其余部分为空白)。我做了一个测试:不是将二进制数据流式传输到客户端浏览器,而是将其保存到服务器虚拟路径上的本地目录,我可以访问完整性正常的PDF,所有数据都出现在保存的文档中。我一直在谷歌搜索3天,尝试所有类型的代码片段,IIS配置(日志文件不显示任何错误),服务器权限,HTML标头,web.config标签等,没有运气。我怀疑它与IIS有什么关系,但我找不到解决方案。这是呈现在客户端浏览器的PDF代码:ASP.NET 4.0,IIS6上的PDF浏览器二进制呈现器

//reportObject is a CrystalReport document object (.rpt) 
Dim s As System.IO.MemoryStream = reportObj.ExportToStream(ExportFormatType.PortableDocFormat) 

s.Seek(0, SeekOrigin.Begin) 

With HttpContext.Current.Response 
    .ClearContent() 
    .ClearHeaders() 
    .ContentType = "application/pdf" 
    .AddHeader("Content-Disposition", "inline; filename=" & fileName) 
    .BinaryWrite(s.ToArray) 
    .Flush() 
    .End() 
End With 

我也尝试了这些,所有的工作我的开发机器上,而不是在服务器上:

With HttpContext.Current.Response 
      .Clear() 
      .ClearHeaders() 
      .Buffer = True 

      .AddHeader("Content-Disposition", "inline; filename=doc.pdf") 
      .AddHeader("Content-Length", Int32.Parse(s.Length)) 
      .AddHeader("Content-transfer-encoding", "8bit") 
      .AddHeader("Cache-Control", "private") 
      .AddHeader("Pragma", "cache") 
      .AddHeader("Expires", "0") 
      .AddHeader("X-UA-Compatible", "IE=EmulateIE7") 

      .ContentType = "application/pdf" 
      .BinaryWrite(s.ToArray) 

      .Flush() 
      .Close() 
      HttpContext.Current.ApplicationInstance.CompleteRequest() 
     End With 

以及这些行:

.AppendHeader("Accept-Ranges", "none") 
.OutputStream.Write(s.ToArray(), 0, Convert.ToInt32(s.Length)) 

似乎没什么帮助。

回答