I've ditulis layanan WCF dengan .NET 4.0, yang di-host pada Windows 7 x64
Ultimate system dengan IIS 7.5.
Salah satu metode layanan memiliki 'objek' sebagai argumen dan I'm mencoba untuk mengirim byte[] yang berisi gambar.
Asalkan ukuran file dari gambar ini kurang maka kira-kira. 48KB, semua berjalan dengan baik. Tapi jika saya'm mencoba untuk meng-upload gambar yang lebih besar, layanan WCF kembali kesalahan: (413) Meminta Badan Terlalu Besar.
Jadi ofcourse I've menghabiskan 3 jam Googling pesan kesalahan dan setiap topik I've melihat tentang subjek ini menunjukkan peningkatan 'uploadReadAheadSize' properti.
Jadi apa yang saya've dilakukan adalah dengan menggunakan perintah berikut (10485760 = 10MB):
"appcmd.exe set config-bagian:sistem.webserver/serverruntime/uploadreadaheadsize: 10485760 /komitmen:apphost"
"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"
I've juga digunakan IIS Manager untuk mengatur nilai dengan membuka situs dan akan "Konfigurasi Editor" di bawah Manajemen. Sayangnya saya'm masih mendapatkan Permintaan Badan Terlalu Besar kesalahan dan itu's mendapatkan benar-benar frustasi!
Jadi tidak ada yang tahu apa lagi yang bisa saya mencoba untuk memperbaiki kesalahan ini?
Bahwa tidak masalah IIS tapi masalah WCF. WCF secara default batas pesan untuk 65KB untuk menghindari penolakan serangan layanan dengan pesan besar. Juga jika anda don't menggunakan MTOM ini mengirimkan byte[] untuk base64 encoded string (33% peningkatan ukuran) => 48KB * 1,33 = 64KB
Untuk memecahkan masalah ini, anda harus mengkonfigurasi layanan anda untuk menerima pesan yang lebih panjang. Masalah ini sebelumnya dipecat 400 Bad Request error tapi dalam versi yang lebih baru WCF mulai menggunakan 413 yang benar kode status untuk jenis kesalahan.
Anda perlu untuk mengatur maxReceivedMessageSize
dalam mengikat anda. Anda juga perlu mengatur readerQuotas
.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="10485760">
<readerQuotas ... />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
Saya sedang mengalami masalah yang sama dengan IIS 7.5 dengan WCF REST Layanan. Mencoba untuk meng-upload melalui POSTING file di atas 65k dan itu akan kembali Error 413 "Permintaan Badan terlalu besar".
Hal pertama yang perlu anda pahami adalah apa yang mengikat anda've dikonfigurasi di web.config. Berikut ini's artikel bagus...
https://stackoverflow.com/questions/2650785/basichttpbinding-vs-wshttpbinding-vs-webhttpbinding
Jika anda memiliki SISA layanan maka anda perlu mengkonfigurasi itu sebagai "webHttpBinding". Berikut ini's the fix:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" transferMode="Streamed">
</binding>
</webHttpBinding>
</bindings>
Aku punya masalah yang sama dan pengaturan uploadReadAheadSize
soal ini:
http://www.iis.net/configreference/system.webserver/serverruntime
"nilai harus antara 0 dan 2147483647."
Hal ini mudah mengaturnya di applicationHost.config-phk jika anda don't ingin melakukan cmd-hal.
Terletak di WindowsFOLDER\System32\inetsrv\config
(2008 server).
Anda harus membukanya dengan notepad. Melakukan Backup file terlebih dahulu.
Menurut komentar di config cara yang disarankan untuk membuka bagian ini dengan menggunakan tag lokasi:
<location path="Default Web Site" overrideMode="Allow">
<system.webServer>
<asp />
</system.webServer>
</location>"
Sehingga anda dapat menulis di bagian bawah (karena itu doesn't ada sebelumnya). Saya menulis maxvalue
di sini - menulis nilai anda sendiri jika anda inginkan.
<location path="THENAMEOFTHESITEYOUHAVE" overrideMode="Allow">
<system.webServer>
<asp />
<serverRuntime uploadReadAheadSize="2147483647" />
</system.webServer>
</location>
Jika anda memasukkannya terakhir sebelum </konfigurasi>
misalnya, anda tahu di mana anda telah ini.
Harapan yang memecahkan masalah anda. Itu SSL overhead masalah bagi saya, di mana terlalu banyak posting dibekukan aplikasi, membesarkan (413) Meminta Badan Terlalu Besar kesalahan.
Saya menerima pesan kesalahan ini, meskipun saya telah max
pengaturan diatur dalam mengikat saya WCF service config:
<basicHttpBinding>
<binding name="NewBinding1"
receiveTimeout="01:00:00"
sendTimeout="01:00:00"
maxBufferSize="2000000000"
maxReceivedMessageSize="2000000000">
<readerQuotas maxDepth="2000000000"
maxStringContentLength="2000000000"
maxArrayLength="2000000000"
maxBytesPerRead="2000000000"
maxNameTableCharCount="2000000000" />
</binding>
</basicHttpBinding>
Tampaknya seolah-olah ini mengikat pengaturan weren't yang diterapkan, sehingga pesan galat berikut:
IIS7 - (413) Meminta Badan Terlalu Besar bila tersambung ke layanan.
Saya menyadari bahwa name=","
atribut dalam <layanan>
tag web.config
adalah tidak gratis bidang teks, karena saya pikir itu. Ini adalah memenuhi syarat nama dari pelaksanaan kontrak service seperti yang disebutkan dalam [dokumentasi ini halaman][1].
Jika itu doesn't pertandingan, maka pengaturan mengikat won't dapat diterapkan!
<services>
<!-- The namespace appears in the 'name' attribute -->
<service name="Your.Namespace.ConcreteClassName">
<endpoint address="http://localhost/YourService.svc"
binding="basicHttpBinding" bindingConfiguration="NewBinding1"
contract="Your.Namespace.IConcreteClassName" />
</service>
</services>
Saya berharap bahwa menyelamatkan orang sakit...
[1]: https://msdn.microsoft.com/en-us/library/ms733932(v=vs. 110).aspx
Ini membantu saya untuk menyelesaikan masalah (salah satu line - split untuk dibaca / copy-kemampuan):
C:\Windows\System32\inetsrv\appcmd set config "YOUR_WEBSITE_NAME"
-section:system.webServer/serverRuntime /uploadReadAheadSize:"2147483647"
/commit:apphost
Jika anda're menjalankan ke dalam masalah ini meskipun mencoba semua solusi di thread ini, dan anda're menghubungkan ke layanan melalui SSL (misalnya https), ini mungkin bisa membantu:
http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top
Untuk meringkas (jika link mati di masa depan), jika permintaan cukup besar sertifikat negosiasi antara klien dan layanan akan gagal secara acak. Untuk menjaga hal ini terjadi, anda'll perlu mengaktifkan pengaturan tertentu pada SSL anda binding. Dari IIS server, berikut adalah langkah-langkah anda'akan perlu untuk mengambil:
netsh http menunjukkan sslcert
. Ini akan memberikan anda konfigurasi anda saat ini. Anda'll ingin menyimpan ini entah bagaimana sehingga anda dapat referensi lagi nanti.netsh http menghapus sslcert <ipaddress>:<pelabuhan>
mana <ipaddress>:<pelabuhan>
adalah IP:port yang ditunjukkan pada konfigurasi yang anda simpan sebelumnya.netsh http tambahkan sslcert
[di sini (MSDN)][1] namun dalam kebanyakan kasus, perintah anda akan terlihat seperti ini:netsh http tambahkan sslcert ipport=<ipaddress>:<pelabuhan> appid=<ID aplikasi dari disimpan config termasuk {}> certhash=<sertifikat hash dari disimpan config> certstorename=<sertifikat nama toko diselamatkan dari config> clientcertnegotiation=enable
Jika anda memiliki beberapa SSL binding, anda'll ulangi proses untuk masing-masing dari mereka. Mudah-mudahan ini bisa membantu menyelamatkan orang lain dengan jam dan jam sakit kepala masalah ini disebabkan saya.
EDIT: Dalam pengalaman saya, anda bisa't benar-benar menjalankan netsh http tambahkan sslcert
perintah dari baris perintah ini diatas. Anda'akan perlu untuk memasukkan netsh prompt terlebih dahulu dengan mengetik netsh
dan kemudian mengeluarkan perintah seperti http tambahkan sslcert ipport=...
dalam rangka untuk itu untuk bekerja.
[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/cc307220(v=vs. 85).aspx
Bagi saya, setting uploadReadAheadSize
untuk int.MaxValue juga tetap masalah, setelah juga meningkatkan batas pada WCF mengikat.
Tampaknya, bila menggunakan SSL, seluruh permintaan badan tubuh dimuat, untuk yang ini metabase properti yang digunakan.
Untuk info lebih lanjut, lihat:
Untuk orang lain yang pernah mencari IIS WCF error 413 : Permintaan entitas yang besar dan menggunakan layanan WCF di Sharepoint, ini adalah informasi untuk anda. Pengaturan dalam aplikasi host dan web.konfigurasi yang disarankan di situs lain/posting don't bekerja di SharePoint jika menggunakan MultipleBaseAddressBasicHttpBindingservicehostfactory. Anda dapat menggunakan SP Powershell untuk mendapatkan SPWebService.Layanan konten, membuat yang baru SPWcvSettings objek dan memperbarui pengaturan seperti di atas untuk layanan anda (mereka tidak't ada). Ingatlah untuk hanya menggunakan nama layanan (misalnya [yourservice.svc]) ketika membuat dan menambahkan pengaturan. Lihat situs ini untuk info lebih lanjut https://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service
Dalam kasus saya, saya harus meningkatkan "Maksimum menerima pesan size" Menerima Lokasi di BizTalk. Yang juga memiliki nilai default dari 64K dan setiap pesan itu terpental oleh BizTAlk terlepas dari apa yang saya dikonfigurasi di web saya.config
Punya kesalahan yang sama pada IIS Express dengan Visual Studio 2017.
HTTP Error 413.0 - Permintaan Badan Terlalu Besar
halaman tidak ditampilkan karena permintaan badan terlalu besar.
kemungkinan penyebab:
Web server menolak untuk melayani permintaan karena permintaan badan terlalu besar.
Web server tidak dapat melayani permintaan karena itu mencoba untuk bernegosiasi sertifikat klien tetapi permintaan badan terlalu besar.
permintaan URL atau fisik pemetaan URL (yaitu, fisik file sistem jalan ke URL's konten) terlalu panjang.
hal-Hal yang dapat anda coba:
Verifikasi bahwa permintaan adalah valid.
Jika menggunakan sertifikat klien, cobalah:
Meningkatkan system.webServer/serverRuntime@uploadReadAheadSize
Konfigurasi SSL akhir untuk bernegosiasi sertifikat klien sebagai bagian dari awal SSL handshake. (netsh http tambahkan sslcert ... clientcertnegotiation=enable) .vs\config\applicationhost.config
Memecahkan masalah ini dengan editing \.vs\config\applicationhost.config
. Switch serverRuntime
dari Menolak
untuk Memungkinkan
seperti ini:
<section name="serverRuntime" overrideModeDefault="Allow" />
Jika nilai ini tidak dapat diedit, anda akan mendapatkan error seperti ini ketika setting uploadReadAheadSize
:
HTTP Error 500.19 - Internal Server Error
halaman Yang diminta tidak dapat diakses karena terkait konfigurasi data untuk halaman yang tidak valid.
Ini bagian konfigurasi tidak dapat digunakan di jalan ini. Hal ini terjadi ketika bagian yang terkunci pada orang tua tingkat. Penguncian yang lebih baik dengan default (overrideModeDefault="Menyangkal"), atau diatur secara eksplisit oleh lokasi tag dengan overrideMode="Menyangkal" atau warisan allowOverride="salah".
Kemudian edit Web.config` dengan nilai berikut:
<system.webServer>
<serverRuntime uploadReadAheadSize="10485760" />
...
I've telah mampu memecahkan masalah ini dengan mengeksekusi panggilan boneka ( misalnya IsAlive kembali benar ) sebelum permintaan dengan konten yang besar yang sama wcf channel/klien. Rupanya ssl negosiasi dilakukan pada panggilan pertama. Jadi tidak perlu untuk meningkatkan Uploadreadaheadsize.
untuk masalah remote server kembali tak terduga respon: (413) Meminta Badan Terlalu Besar pada WCF dengan Resful
silakan lihat saya menjelaskan konfigurasi
</client>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true"/>
<bindings>
<!-- this for restfull service -->
<webHttpBinding>
<binding name="RestfullwebHttpBinding"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" transferMode="Streamed">
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647" />
</binding>
</webHttpBinding>
<!-- end -->
<!-- this for Soap v.2 -->
<wsHttpBinding>
<binding name="wsBinding1" maxReceivedMessageSize="2147483647" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<!--UsernameToken over Transport Security-->
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" establishSecurityContext="true"/>
</security>
</binding>
</wsHttpBinding>
<!-- this for restfull service -->
<!-- this for Soap v.1 -->
<basicHttpBinding>
<binding name="basicBinding1" maxReceivedMessageSize="2147483647" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false" transferMode="Streamed">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="None"/>
</binding>
</basicHttpBinding>
</bindings>
<!-- end -->
<services>
<clear/>
<service name="ING.IWCFService.CitisecHashTransfer" >
<endpoint address="http://localhost:8099/CitisecHashTransfer.svc"
behaviorConfiguration="RestfullEndpointBehavior"
binding="webHttpBinding"
bindingConfiguration="RestfullwebHttpBinding"
name="ICitisecHashTransferBasicHttpBinding"
contract="ING.IWCFService.ICitisecHashTransfer" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ING.IWCFService.IWCFServiceValidator, ING.IWCFService"/>
</serviceCredentials>
<serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="SuccessOrFailure" messageAuthenticationAuditLevel="SuccessOrFailure"/>
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="100" maxConcurrentInstances="1000"/>
</behavior>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
<behavior name="RestfullEndpointBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
Dalam kasus saya, saya mendapatkan pesan kesalahan ini karena saya mengubah layanan's namespace dan pelayanan tag menunjuk ke yang lebih tua namespace. Aku refresh namespace dan kesalahan menghilang:
<services>
<service name="My.Namespace.ServiceName"> <!-- Updated name -->
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="MyBindingConfiguratioName"
contract="My.Namespace.Interface" <!-- Updated contract -->
/>
</service>
</services>