kzen.dev
  • Sorular
  • Etiketler
  • Kullanıcılar
Bildirimler
Ödüller
Kayıt
Kaydolduktan sonra, sorularınıza verilen yanıtlar ve yorumlar size bildirilecektir.
Oturum aç
Zaten bir hesabınız varsa, yeni bildirimleri kontrol etmek için giriş yapın.
Eklenen sorular, cevaplar ve yorumlar için ödüller olacaktır.
Daha
Kaynak
Düzenle
 kipusoep
kipusoep
Question

(413) İstek Varlığı Çok Büyük | uploadReadAheadSize

Windows 7 x64 Ultimate sistemimde IIS 7.5 ile barındırılan .NET 4.0 ile bir WCF servisi yazdım. Servis yöntemlerinden birinde argüman olarak bir 'nesne' var ve ben bir resim içeren bir byte[] göndermeye çalışıyorum. Bu resmin dosya boyutu yaklaşık 48KB'den az olduğu sürece her şey yolunda gidiyor. Ancak daha büyük bir resim yüklemeye çalışırsam, WCF hizmeti bir hata döndürüyor: (413) Request Entity Too Large. Tabii ki hata mesajını Google'da araştırmak için 3 saat harcadım ve bu konuda gördüğüm her konu 'uploadReadAheadSize' özelliğinin yükseltilmesini öneriyor. Bu yüzden aşağıdaki komutları kullandım (10485760 = 10MB):

"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"

"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"

Ayrıca siteyi açıp Yönetim altında "Yapılandırma Düzenleyicisi"ne giderek değeri ayarlamak için IIS Yöneticisini kullandım. Ne yazık ki hala Request Entity Too Large hatası alıyorum ve bu gerçekten sinir bozucu olmaya başladı!

Bu hatayı düzeltmek için başka ne deneyebileceğimi bilen var mı?

130 2012-04-12T11:49:10+00:00 3
Uwe Keim
Uwe Keim
Edited question 2018ööp29öö9 Nisan 2018 в 9:29
Programlama
wcf
iis
This question has 1 Cevap in English, to read them log in to your account.
Solution / Answer
Ladislav Mrnka
Ladislav Mrnka
2012ösp39ös12 Nisan 2012 в 12:39
2012-04-12T12:39:33+00:00
Daha
Kaynak
Düzenle
#15920312

Bu IIS'nin sorunu değil, WCF'nin sorunudur. WCF, büyük mesajlarla hizmet reddi saldırısını önlemek için varsayılan olarak mesajları 65KB ile sınırlar. Ayrıca MTOM kullanmazsanız, byte[]'ı base64 kodlu dizeye gönderir (boyutta %33 artış) => 48KB * 1,33 = 64KB

Bu sorunu çözmek için hizmetinizi daha büyük mesajları kabul edecek şekilde yeniden yapılandırmanız gerekir. Bu sorun daha önce 400 Bad Request hatasını tetikliyordu, ancak yeni sürümde WCF bu tür hatalar için doğru durum kodu olan 413'ü kullanmaya başladı.

Bağlayıcınızda maxReceivedMessageSize ayarını yapmanız gerekir. Ayrıca readerQuotas ayarlamanız da gerekebilir.

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding maxReceivedMessageSize="10485760">
        <readerQuotas ... />
      </binding>
    </basicHttpBinding>
  </bindings>  
</system.serviceModel>
200
0
Robert Barrueco
Robert Barrueco
2013ösp30ös18 Haziran 2013 в 6:30
2013-06-07T18:30:43+00:00
Daha
Kaynak
Düzenle
#15920314

Bir WCF REST Hizmeti ile IIS 7.5 ile aynı sorunu yaşıyordum. POST ile 65k üzerindeki herhangi bir dosyayı yüklemeye çalıştığımda Hata 413 "Request Entity too large" döndürüyordu.

Anlamanız gereken ilk şey, web.config dosyasında ne tür bir bağlama yapılandırdığınızdır. Burada harika bir makale var...

https://stackoverflow.com/questions/2650785/basichttpbinding-vs-wshttpbinding-vs-webhttpbinding

Bir REST servisiniz varsa, bunu "webHttpBinding" olarak yapılandırmanız gerekir. İşte çözüm:

<system.serviceModel>

<bindings>
   <webHttpBinding>
    <binding 
      maxBufferPoolSize="2147483647" 
      maxReceivedMessageSize="2147483647" 
      maxBufferSize="2147483647" transferMode="Streamed">
    </binding>    
   </webHttpBinding>
</bindings>
 Community
Community
Edited answer 2017ööp31öö10 Mayıs 2017 в 10:31
54
0
Tom P
Tom P
2013ööp15öö8 Mart 2013 в 8:15
2013-03-29T08:15:09+00:00
Daha
Kaynak
Düzenle
#15920313

Ben de aynı sorunu yaşadım ve uploadReadAheadSize ayarını yapmak sorunu çözdü:

http://www.iis.net/configreference/system.webserver/serverruntime

"Değer 0 ile 2147483647 arasında olmalıdır."

Eğer cmd ile bir şey yapmak istemiyorsanız, bunu applicationHost.config-fle içinde kolayca ayarlayabilirsiniz.

WindowsFOLDER\System32\inetsrv\config` (2008 sunucusu) içinde bulunur.

Not defteri ile açmalısınız. Önce dosyanın bir yedeğini alın.

Yapılandırmadaki yorumlara göre, bölümlerin kilidini açmak için önerilen yol bir konum etiketi kullanmaktır:

<location path="Default Web Site" overrideMode="Allow">
    <system.webServer>
        <asp />
    </system.webServer>
</location>"

Böylece alt kısma yazabilirsiniz (daha önce mevcut olmadığı için). Ben buraya maxvalue yazıyorum - isterseniz kendi değerinizi yazın.

<location path="THENAMEOFTHESITEYOUHAVE" overrideMode="Allow">
    <system.webServer>
        <asp />
        <serverRuntime uploadReadAheadSize="2147483647" />
    </system.webServer>
</location>

Örneğin </configuration> dan önce en sona koyarsanız, nerede olduğunu bilirsiniz.

Umarım bu sorunlarınızı çözer. Bu benim için bir SSL ek yük sorunuydu, çok fazla gönderi uygulamayı dondurdu ve (413) Request Entity Too Large hatası verdi.

 abatishchev
abatishchev
Edited answer 2016ösp51ös23 Nisan 2016 в 11:51
25
0
Soru ekleyin
Kategoriler
Herşey
Teknoloji
Kültür / Rekreasyon
Yaşam / Sanat
Bilim
Profesyonel
İş Dünyası
Kullanıcılar
All
New
Popular
1
Роман Азаров
Registered 3 gün önce
2
Mansur Zakirov
Registered 6 gün önce
3
Тагир Мамедов
Registered 1 hafta önce
4
Алексей Толманов
Registered 1 hafta önce
5
Valeriu Vodnicear
Registered 2 hafta önce
DE
ES
ID
JA
RU
TR
© kzen.dev 2023
Kaynak
stackoverflow.com
Lisans altında cc by-sa 3.0 atıf ile