2ページのシンプルなWebサイトがあります。1つはファイルのリストを表示し、もう1つはリストでクリックされたときにファイルをストリーミングします。実稼働環境では6か月間すべて問題ありませんでしたが、今度はサイトをWindows 2008/IIS7に移動する必要があります。私はそれをほとんど機能させていますが、私のcontent-typeヘッダーが無視されているため、ファイルは(Firefoxで)正しく開かれません。本番サイト(IIS6)では、ヘッダーは(Fiddlerを使用して)次のとおりです。
HTTP/1.1 200 OK
Date: Tue, 09 Feb 2010 16:00:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Content-Length: 236841
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream
しかし、テストIIS7サーバーでは次のようになります。
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 236841
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Fiddlerはプロトコル違反も報告し、「コンテンツの長さの不一致:応答ヘッダーが236841バイトを要求しましたが、サーバーは238378バイトを送信しました」と述べています。
私のコードは次のようになります。
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + doc.DisplayFilename + "." + doc.FileExtension + "\"");
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(file.FullName);
Response.End();
私はこれを数日間修正しようとしています。私はIIS7にあまり詳しくなく、さまざまな設定を変更する場所を見つけるのに苦労しました。私は2つのマネージドパイプラインモードについて理解し、Classic .NET AppPoolに切り替えることで他のいくつかの問題を修正しました(Integratedはファイルの送信時にあらゆる種類のエラーをスローしていました)。
何が起こっているのか、IIS7にContentTypeヘッダーを上書きしないように指示する方法はありますか?