2011-10-27 64 views
0

我有这段代码:写Word文档在飞行

Response.AddHeader("Content-type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 
Response.AppendHeader("Content-disposition", "attachment; filename=Bio.docx"); 
Response.BinaryWrite(lawyerBio.MakeDoc()); 

它可以在所有主要浏览器就好了,但在IE8失败。

什么IE8正在做的是我第一次打的页面,它给出了一个说:弹出错误:

Internet Explorer无法下载从“约翰·史密斯”“网站域名”。

Internet Explorer无法打开此Internet站点。 请求的网站不可用或无法找到。请稍后再试 。

如果我点击确定,然后刷新页面,它将下载文件就好了,文件名为Bio.docx。它每次都是第一次失败,而且每次都是第二次。 John-Smith是正在发生的页面的文件名,因此它看起来好像是第一次通过,它没有提取内容处置。

是否有任何已知的问题与IE8,或任何你们可以看到我做错了什么?

干杯


更新

下面是这个文件发送的头:

 Array 
(
    [0] => HTTP/1.1 200 OK 
    [1] => Cache-Control: no-cache, no-store 
    [2] => Pragma: no-cache 
    [3] => Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document 
    [4] => Expires: -1 
    [5] => Server: Microsoft-IIS/7.5 
    [6] => Set-Cookie: website#sc_wede=1; path=/ 
    [7] => Set-Cookie: website#lang=en; path=/ 
    [8] => Set-Cookie: ASP.NET_SessionId=zabhwz55brq0ebfyjqn1c3bm; path=/; HttpOnly 
    [9] => Content-Disposition: attachment; filename=Bio.docx 
    [10] => X-AspNet-Version: 2.0.50727 
    [11] => Set-Cookie: SC_ANALYTICS_GLOBAL_COOKIE=323F079A90B545F39F8A6A9EB9B919DB; expires=Fri, 26-Oct-2012 17:44:57 GMT; path=/ 
    [12] => Set-Cookie: SC_ANALYTICS_SESSION_COOKIE=118B88825A054BA1BAF327B0561C3EBB,1; path=/ 
    [13] => X-Powered-By: ASP.NET 
    [14] => Date: Thu, 27 Oct 2011 17:44:57 GMT 
    [15] => Connection: close 
    [16] => Content-Length: 169581 
) 
+2

您会注意到IE8没有被加入“所有主流浏览器”;) –

+0

您使用的是SSL还是Cache-Control标头? – Martey

+0

没有SSL,但我会从FF Web Dev获取头文件的副本,并将它们附加到原始问题。 –

回答

0

我认为问题是Cache-Control头。请参阅MSKB #323308。尽管有标题,但我在网上发现了许多帖子,暗示不缓存下载文件可能会导致非SSL网站在Internet Explorer中失败。我会尝试添加知识库文章建议的注册表值BypassHTTPNoCacheCheck - 如果它能够正常工作,则需要从响应中删除缓存标头。

+0

我认为你是对的,但是我不能说服我的客户在生产网络服务器上搞砸他们的注册表。任何想法如何通过代码关闭它? –

+0

根据http://www.php.net/manual/en/function.header.php#99190,删除Cache-Control和Pragma头文件应该能够解决这个问题。 – Martey

+0

接受这个答案,因为这是为什么它失败。如何解决这个问题要复杂得多,但我有一种感觉,就是IIS,C#和SiteCore之间的混乱 - 但这是我的解决方案特有的,而不是问题,这是其他人要搜索和查找的问题这个。 –

0

尝试(而不是BinaryWrite)这个......(你总是可以互换MemoryStreamFileStream如果文件不是直接在磁盘上)。

  byte[] buffer = new byte[4096]; 
      using (Stream s = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 
      { 
       int bytes; 
       while ((bytes = s.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        Response.OutputStream.Write(buffer, 0, bytes); 
       } 
      } 
      Response.Flush(); 
+0

我试着用MemoryStream()运行这个,但仍然有相同的结果。 –

+0

尝试在每次调用时更改文档的名称以查看它是否是缓存问题。而不是生物.docx使它''Guid.NewGuid()+“.docx”' – SliverNinja

+0

我已经实现了,IE8仍然认为它在第一次运行约翰史密斯,然后在后续guid.docx。 –