2011-10-27 10 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に失敗しています。

Internet Explorerがから「ジョン・スミス」「サイトのドメイン」をダウンロードすることができません:IE8が何をしているか

は私がページをヒット初めてです、それは言うポップアップエラーが発生します。

Internet Explorerはこのインターネットサイトを開けませんでした。要求されたサイト は利用できないか、見つからないサイトです。後で にもう一度お試しください。

私がOKを押した後、ページを更新すると、ファイル名Bio.docxが正しくダウンロードされます。それは毎回初めて失敗し、毎回2回目です。ジョン - スミスは、これが行われているページのファイル名です。最初のように見えますが、コンテンツ - 配置についてはピックアップしていないようです。

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またはキャッシュコントロールヘッダーを使用していますか? – Martey

+0

SSLはありませんが、私はFF Web Devからヘッダーのコピーを取得し、元の質問に添付します。 –

答えて

0

私は問題はのCache-Controlヘッダのだと思います。 MSKB #323308を参照してください。そのタイトルにもかかわらず、ファイルのダウンロードをキャッシュしないとInternet ExplorerでもSSL以外のWebサイトも失敗する可能性があることを示唆する数々の投稿がオンラインで見つかりました。私は、KBの記事が示唆しているレジストリ値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

各呼び出しでドキュメントの名前を変更して、キャッシュの問題であるかどうかを確認してください。 bio.docxの代わりに 'Guid.NewGuid()+" .docx "' – SliverNinja

+0

私はこれを実装しました。IE8は最初の実行時にはjohn-smith、それ以降はguid.docxと見なします。 –

関連する問題