2010-02-09 15 views
5

İki sayfa içeren basit bir web sitem var. Bir, bir dosya listesini görüntüler ve diğer, listede tıklandığında bir dosyayı akışa alır. Her şey 6 aydır üretimde iyiydi, ama şimdi siteyi Windows 2008/IIS7'ye taşımak zorundayım. Çoğunlukla çalışıyorum, ancak içerik türü üstbilgisi göz ardı ediliyor çünkü dosyalar (Firefox'ta) düzgün açılmıyor. üretim sahası (IIS6) başlıkları (Fiddler kullanarak) vardır Açık: Dosyaları aktarmak için ASP.NET kullandığımda IIS7 neden içerik türü üstbilgisini yok sayar?

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 

fakat test IIS7 sunucusunda alıyorum

:

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" 
Kemancı da bir protokol ihlali bildiriyor ve "İçerik uzunlukta diyor

uyumsuzluk: Yanıt Üstbilgisi 236841 bayt talep etti, ancak sunucu 238378 bayt gönderdi. "

Benim kod şöyle görünür:

  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(); 

Ben birkaç gün boyunca bu sorunu gidermek için çalışıyorum. IIS7'ye aşina değilim ve çeşitli ayarları nerede değiştireceğimi bulmak için uğraştım. İki Yönetilen Boru Hattı Modunu anlamaya ve Klasik .NET AppPool'a geçerek bazı diğer sorunları çözdüm (Entegre, dosyayı iletirken her türlü hatayı atıyordu).

IIS7'ye ContentType üstbilgisinin üzerine yazmamasını söyleyen bir yöntem var mı?

cevap

0

İstek/Yanıtı değiştiren hiçbir HttpModules'ünüz yok mu? Web.config dosyaları tam olarak aynı mı?

Bu ekstra 2K bayt nereden geliyor? İçlerinde ne var?

+1

Bu, IIS7 ile ilgisi olmadığını ortaya koydu - eklediğim bazı hata işleme kodlarıyla ilgili olmak zorundaydı. Response.End() birçok web örneğinin bu satırı içermesine rağmen bir hata gibi görünüyor. Bir "iş parçacığı iptal edildi" özel durumuna neden olur. Bu, hata işleyicimin çalışmasına neden oldu; bu, bir hata sayfasına bir Server.Transfer yapar. Böylece yanıt, üstbilgiler, dosya ve hata sayfasının HTML'inin başlangıcındaydı. Hata sayfası yazmaya başladığında, içerik türünü HTML'ye geri çevirdi. Kısa öykü: Response.End() deyimini kaldırmak sorunu çözdü. –

+0

Çok ilginç! Bu davranışı Response.End'den görmedim ... Bunu aklımda tutacağım. – Bryan

+0

Görünüşe göre ben de aynı sorunu yaşadım ve Response.End() kaldırarak çözdü. Özel Content-Type üstbilgisini (image/tiff) geri alıp tarayıcının karışmasına neden olan metin/html'ye sıfırlanıyor gibi görünüyor. –