【发布时间】:2012-06-12 19:46:40
【问题描述】:
我正在尝试确定这是 IIS 问题还是代码问题。我倾向于前者,但在那种情况下我不知道如何解决它。
我有几个 Asp.Net Web 应用程序将 PDF 创建为 MemoryStream(使用 iTextSharp),然后使用 MemoryStream.ToArray 方法在屏幕上显示 PDF。下面是我使用的基本代码。
Try
Dim m As System.IO.MemoryStream = pdfhelper.createFileMethod(filename)
Dim data As Byte() = m.ToArray
Response.Clear()
Response.Buffer = True
Response.AddHeader("Content-Length", data.Length.ToString())
Response.AddHeader("Content-Disposition", "inline; filename=sample")
Response.AddHeader("Expires", "0")
Response.AddHeader("Pragma", "cache")
Response.AddHeader("Cache-Control", "private")
Response.ContentType = "application/pdf"
Response.AddHeader("Accept-Ranges", "bytes")
Response.BinaryWrite(data)
Response.Flush()
Response.End()
Catch ex As Exception
throw ex
End Try
我从 Windows Server 2008 R2 标准版、64 位、版本 6.1 Build 7601 Service Pack 1 和 IIS 7.5.7600.16385 提供服务。
当我在 Internet Explorer 中使用该应用程序时,我可以毫无问题地打开 PDF 文档。当我使用 Chrome 或 Firefox 时,PDF 只是在加载时挂起。它根本不会加载。我没有收到错误消息。无论我是在服务器上还是在客户端上运行,问题都是一样的。
但是,当我使用 Visual Studio 内置的 IIS 在我的开发机器上运行时,无论使用哪种浏览器,我都没有问题。
我知道this hotfix. 中解决的问题,因此我假设问题出在 IIS 中。但是,我无法应用此修补程序,因为它仅对我的 Windows 版本的 Build 7600 有效。
所以我又想知道 - 这是 IIS 吗?这是我的代码吗,只是 IE 更能容忍我犯的错误?我该如何解决?
感谢您提供的任何想法。
编辑:我找到了this suggestion,它强制下载 PDF 而不是在浏览器中打开。绝对不是这个问题的理想解决方案。希望有人有其他想法。
【问题讨论】:
-
你试过添加Response.ClearHeaders()
-
试过了——我把response.ClearHeaders放在response.clear之后,没有任何区别。而且我很有希望.... :(
-
查看this post - 它很长,但要点似乎是“ws08r2 如何处理字节范围请求”发生了变化,导致“adobe acrobat 中的错误”。
-
谢谢。看起来这个线程是关于我链接到的修补程序的问题。但随后修补程序包含在服务包 1(我有)中并且应该可以工作。但是,在 cmets 更底层的人说,该修补程序在升级到 Service Pack 1 之前一直有效,此时它再次停止工作。有人当时提出的唯一建议是将服务器 IE 从 9 回滚到 8。我明天会尝试。至少我不是一个人在奇怪的问题上!
-
如果 application/pdf 则不需要文件名,但不应破坏它。就像流媒体打破了它。在 iTextSharp 中,您是否将其设置为流式传输?我不知道它在 iTextSharp 中叫什么,但在 Acrobat 中它是否像 Web 优化。
标签: .net windows pdf iis-7.5 itextsharp