İ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ı?
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ü. –
Çok ilginç! Bu davranışı Response.End'den görmedim ... Bunu aklımda tutacağım. – Bryan
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. –