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:

  1. Başlat'ı seçin, Çalıştır'ı seçin, cmd yazın ve tamam'ı seçin.

  2. cd /d %systemdrive%\inetpub\adminscripts Komutu yazın ve Enter tuşuna basın.

  3. 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:

  1. Başlat'ı seçin, Çalıştır'ı seçin, cmd yazın ve tamam'ı seçin.
  2. cd /d %systemdrive%\inetpub\adminscripts Komutu yazın ve Enter tuşuna basın.
  3. 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.