C#BinaryWrite over SSL

我正在尝试使用存储在MSSQL varbinary(MAX)字段中的PDF回复客户端。 响应通过http连接在我的localhost和测试服务器上运行,但不能通过https连接在生产服务器上运行。 我只使用一个简单的BinaryWrite(下面的代码)。

byte[] displayFile = DatabaseFiles.getPdfById(id); Response.ContentType = "application/pdf"; Response.BinaryWrite(displayFile); 

这里没什么好看的。 只需获取二进制数据,设置内容类型,然后写回客户端。 有没有什么特别需要做的,以这种方式回复https?

编辑:通过不起作用,我的意思是我在浏览器中得到一个空白文档。 Acrobat无法在浏览器中加载。

编辑:我只是注意到这个问题只发生在IE 7中.PDF 3中的PDF正确加载。我们的客户端专门使用IE 7(优于IE 6,我说服他们升级…大声笑)。

编辑:尝试添加标题“content-disposition”以使文件充当附件。 浏览器无法在SSL下加载IE错误“Internet Explorer无法从ProductionServer.net下载displayFile.aspx”。 (以下代码)

  byte[] displayFile = DatabaseFiles.getPdfById(id); Response.Clear(); Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", fileName)); Response.ContentType = "application/pdf"; Response.BinaryWrite(displayFile); 

编辑:如果在生产服务器上通过http查看文件,浏览器将显示PDF的代码,就像通过NotePad查看一样。 (例如%PDF-1.4%â€6 0 obj endobj xref 6 33 …等)

我只是设法通过替换来解决这个问题

 Response.Clear(); 

 Response.ClearContent(); Response.ClearHeaders(); 

整个事情看起来像:

 byte[] downloadBytes = doc.GetData(); Response.ClearContent(); Response.ClearHeaders(); Response.Buffer = true; Response.ContentType = "application/pdf"; Response.AddHeader("Content-Length", downloadBytes.Length.ToString()); Response.AddHeader("Content-Disposition", "attachment; filename=myFile.pdf"); Response.BinaryWrite(downloadBytes); Response.Flush(); Response.End(); 

IE 7具有PDF的mime类型“问题” ,与复杂的mime类型规则有关 。 您可能想要validation客户端是否具有该修补程序。

由于其他原因(脚本标签,response.flush和keepalive),AFAIK还没有得到可靠解决,因此也出现了IE 7空白页的零星投诉。

幸运的是,听起来每次都会发生这种情况 – 所以你应该能够很快地找到它的底部。

您可以尝试将.pdf与ASP.NET相关联,以便通过IE将URL作为PDF文件获取。 这应该覆盖mime类型问题。

重定向(HTTP Response.Redirect,基于Javascript和链接)似乎有助于解决其他一些问题。

检查生产服务器上的IIS keepalive设置,或使用Fiddler观看,将向您显示Keepalive是否存在问题。

也许添加一个内容处置标题会有所帮助……但这不是我的头脑。

我的猜测是SSL关系是一个红色的鲱鱼,所以我也要在生产服务器上检查非SSL。

陷入同样的​​问题。 也只有IE。 通过从.aspx页面中删除<%@ OutputCache Location="None" %>来修复我的问题。 这或许可以解释为什么Response.ClearHeaders调用在上面工作。

你可以使用Wireshark(或类似的)来查看客户端的内容吗?

这是Fiddler中查看的原始请求

 GET /displayFile.aspx?id=128 HTTP/1.1 Accept: */* Accept-Language: en-us UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) Host: ProductionServer.net Connection: Keep-Alive 

编辑:以下是Fiddler中查看的原始响应标题

 HTTP/1.1 200 OK Date: Wed, 10 Dec 2008 18:39:54 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: no-cache Pragma: no-cache Expires: -1 Content-Type: application/pdf; charset=utf-8 Content-Length: 102076 

几年前我遇到了同样的问题。 我们找到的解决方案并不是最美丽的解决方案。 我们将文件写入磁盘并对其执行了Response.Redirect。