IIS'de Response.BinaryWrite kullanılırken HTTP 500 veya Yanıt arabellek sınırı aşıldı hatası
Bu makale, dosya göndermek için yöntemini kullandığınızda Response.BinaryWrite
oluşan hatayı (HTTP 500 veya Yanıt arabellek sınırı aşıldı) çözmenize yardımcı olur.
Orijinal ürün sürümü: Internet Information Services 7 ve sonraki sürümleri
Özgün KB numarası: 944886
Belirtiler
Internet Information Services (IIS) 7 veya sonraki bir sürümün yüklü olduğu bir Web sunucusundan bir istemci bilgisayara dosya gönderdiğinizde, istemci bilgisayarda aşağıdakine benzer bir hata iletisi alabilirsiniz:
Hata iletisi 1
HTTP 500 - İç Sunucu Hatası
Hata iletisi 2
'ASP 0251 : 80004005' yanıt nesnesi hatası
Yanıt Arabellek Sınırı Aşıldı
ASP sayfasının yürütülmesi, Yanıt Arabelleğinin yapılandırılan sınırını aşmasına neden oldu.Hata iletisi 3
Ayrıca IIS günlük dosyasında aşağıdakine benzer bir ileti alabilirsiniz:
ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded
Bu sorun, dosyayı istemci bilgisayara göndermek için yöntemini kullandığınızda Response.BinaryWrite
ve AspBufferingOn
özelliği False olarak ayarlandığında oluşur.
Neden
BU sorun, ASP yanıt arabelleği devre dışı bırakıldığında IIS'nin 4 MB'lık bir varsayılan Etkin Sunucu Sayfaları (ASP) yanıt arabelleği değerini zorlaması nedeniyle oluşur.
Çoğu senaryoda, Web istemcilerine gönderilen ASP yanıtları için 4 MB arabellek sınırı yeterlidir. Bu sınır yetersizse aşağıdaki yöntemlerden birini kullanın.
Çözünürlük 1: Yanıt boyutunu küçültme
Yöntemini kullandığınızda Response.BinaryWrite
ve ASP arabelleği kapalı olduğunda bu sorunu çözmek için istemciye döndürülen verilerin 4 MB'tan büyük olmadığını doğrulayın.
Yanıt 4 MB'lık varsayılan değerden büyükse, bu boyut genellikle kötü bir kullanıcı deneyimine neden olur. Web tarayıcısı büyük yanıtı ağ üzerinden almalıdır. Ardından Web tarayıcısının büyük bir HTML yanıtını ayrıştırması ve görüntülemesi gerekir.
Çözüm 2: ASP yanıt arabelleği oluşturmayı etkinleştirme ve arabellek sınırını artırma
Uygulama düzeyinde arabelleğe almayı etkinleştirmek veya devre dışı bırakmak için IIS metatabanı özelliğini kullanabilirsiniz AspBufferingOn
.
Not
IIS 7 ve sonraki sürümlerde, dosyadaki veya dosyadaki ASP bölümündeki <System.webserver>
ApplicationHost.config
değeri kullanarak bufferingOn
uygulama düzeyinde ASP yanıt arabelleği oluşturmayı etkinleştirebilir veya Web.config
devre dışı bırakabilirsiniz.
Sayfa düzeyinde arabelleğe almayı etkinleştirmek veya devre dışı bırakmak için özelliğini kullanabilirsiniz Response.Buffer
.
Arabellek sınırını artırmanız gerekiyorsa, bilinen en büyük yanıt boyutuna izin veren bir arabellek sınırı seçin. En büyük yanıt boyutunu önceden bilmiyorsanız, test sırasında arabellek sınırını büyük bir değere artırabilirsiniz. Testi tamamladıktan sonra, sayfa için oluşturulan yanıt için IIS günlük dosyasındaki sc-bytes alanında görüntülenen en büyük değeri kullanın.
IIS 7 ve sonraki sürümlerde arabelleğe alma sınırını artırmak için şu adımları izleyin:
Başlat'ı seçin, Çalıştır'ı seçin, cmd yazın ve tamam'ı seçin.
cd /d %systemdrive%\inetpub\adminscripts
Komutu yazın ve Enter tuşuna basın.cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize
Komutu yazın ve Enter tuşuna basın.Not
LimitSize
bayt cinsinden arabelleğe alma sınırı boyutunu temsil eder. Örneğin, 67108864 sayısı arabelleğe alma sınırı boyutunu 64 MB olarak ayarlar.
Arabellek sınırının doğru ayarlandığını onaylamak için şu adımları izleyin:
- Başlat'ı seçin, Çalıştır'ı seçin, cmd yazın ve tamam'ı seçin.
cd /d %systemdrive%\inetpub\adminscripts
Komutu yazın ve Enter tuşuna basın.cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit
Komutu yazın ve Enter tuşuna basın.
Daha fazla bilgi
yöntemini kullandığınızda Response.BinaryWrite
ve ASP yanıt arabelleği devre dışı bırakıldığında, sayfanın arabelleğe alma sınırı özelliği açıkça ayarlanmadığı sürece istemciye yalnızca 4 MB veri gönderebilirsiniz. Varsayılan olarak, IIS 7 veya sonraki bir sürümdeki özelliğin bufferLimit
değeri 4.194.304 bayttır.
Ayrıca, BinaryWrite()
ASP yanıt arabelleği kapalı olsa bile istemciye verilen yanıt arabellek sınırı değerinden büyükse API başarısız olur.
Not
ASP yanıt arabelleği oluşturmayı etkinleştirmenizi öneririz. ASP yanıt arabelleği oluşturma, Bir Web uygulamasının performansını artırır.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin