(413) Запросить сущность слишком большой | UploadReadAheadSize

Я написал службу WCF с .NET 4.0, которая размещена на моей системе Windows 7 x64 Ultimate с IIS 7.5. Один из методов службы имеет «объект» в качестве аргумента, и я пытаюсь отправить байт [], содержащий изображение. Пока размер файла этого изображения меньше ок. 48 КБ, все идет хорошо. Но если я пытаюсь загрузить увеличенное изображение, служба WCF возвращает ошибку: (413) Request Entity Too Large. Так что, конечно, я потратил 3 часа на поиск сообщения об ошибке Google, и каждая тема, которую я видел по этому вопросу, предполагает повышение свойства uploadReadAheadSize. Итак, я сделал следующие команды (10485760 = 10 МБ):

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

"cscript adsutil.vbs set w3svc//uploadreadaheadsize 10485760"

Я также использовал диспетчер IIS для установки значения, открыв сайт и перейдя в «Редактор конфигурации» в разделе «Управление». К сожалению, я все еще получаю сообщение об ошибке Entity Too Large, и это становится очень расстраивающим!

Так кто-нибудь знает, что еще я могу попытаться исправить эту ошибку?

Это не проблема IIS, а проблема WCF. WCF по умолчанию ограничивает сообщения до 65 КБ, чтобы избежать атаки на отказ в обслуживании большими сообщениями. Также, если вы не используете MTOM, он отправляет байт [] в кодировку base64 (увеличение на 33%) => 48 КБ * 1,33 = 64 КБ

Чтобы решить эту проблему, вы должны перенастроить свою службу, чтобы принимать более крупные сообщения. Ранее эта проблема вызывала ошибку 400 Bad Request, но в новой версии WCF начал использовать 413, который является правильным кодом состояния для этого типа ошибок.

Вам нужно установить maxReceivedMessageSize в вашу привязку. Вам также может потребоваться установить readerQuotas .

          

У меня была такая же проблема с IIS 7.5 с помощью службы WCF REST. Попытка загрузить через POST любой файл выше 65k, и он вернет Error 413 «Request Entity too large».

Первое, что вам нужно понять, – это то, какой тип привязки вы настроили в web.config. Вот отличная статья …

BasicHttpBinding против WsHttpBinding vs WebHttpBinding

Если у вас есть служба REST, вам необходимо настроить ее как «webHttpBinding». Вот исправление:

        

У меня была та же проблема, и установка uploadReadAheadSize решила его:

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

«Значение должно быть от 0 до 2147483647.»

Его легко установить в applicationHost.config-fle, если вы не хотите делать cmd-вещь.

Его расположение находится в WindowsFOLDER\System32\inetsrv\config (сервер 2008).

Вы должны открыть его с помощью блокнота. Сначала создайте резервную копию файла.

Согласно комментариям в config, рекомендуемым способом разблокировки разделов является использование тега местоположения:

     " 

Таким образом, вы можете писать внизу (так как это не существует раньше). Я пишу maxvalue здесь – напишите свое значение, если хотите.

       

Если вы положили его последним до например, вы знаете, где у вас есть.

Надеюсь, что решает ваши проблемы. Для меня это была проблема с SSL-обработкой, где слишком много сообщений о замораживании приложения, что привело к ошибке (413) Request Entity Too Large .

Я получил это сообщение об ошибке, хотя у меня были max настройки, установленные в привязке моего конфигурационного файла службы WCF:

      

Казалось, что эти настройки привязки не применяются, поэтому появляется следующее сообщение об ошибке:

IIS7 – (413) запрашивает сущность слишком сильно при подключении к службе.

,

Проблема

Я понял, что атрибут name="" в web.config не является свободным текстовым полем, как я думал. Это полностью квалифицированное название реализации контракта на обслуживание, как указано на этой странице документации .

Если это не соответствует, настройки привязки не будут применены!

       

Надеюсь, это избавит кого-то от боли …

Это помогло мне решить проблему (одна строка – разделение для удобства чтения / копирования):

 C:\Windows\System32\inetsrv\appcmd set config "YOUR_WEBSITE_NAME" -section:system.webServer/serverRuntime /uploadReadAheadSize:"2147483647" /commit:apphost 

Если вы столкнулись с этой проблемой, несмотря на попытки всех решений в этом streamе, и вы подключаетесь к службе через SSL (например, https), это может помочь:

http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top

Подводя итог (в случае, если ссылка будет в будущем), если ваши запросы достаточно велики, согласование сертификатов между клиентом и службой будет происходить случайным образом. Чтобы этого не произошло, вам нужно включить определенные настройки в ваших привязках SSL. С вашего сервера IIS выполните следующие действия:

  1. Через cmd или powershell запустите netsh http show sslcert . Это даст вам текущую конфигурацию. Вы захотите сохранить это как-то, чтобы позже вы могли ссылаться на него.
  2. Вы должны заметить, что «Negotiate Client Certificate» отключен. Это проблема настройки; следующие шаги покажут, как включить его.
  3. К сожалению, нет способа изменить существующие привязки; вам придется удалить его и повторно добавить. Запустите netsh http delete sslcert : где : – это IP-порт, показанный в конфигурации, сохраненной ранее.
  4. Теперь вы можете повторно добавить привязку. Вы можете просмотреть допустимые параметры для netsh http add sslcert здесь (MSDN), но в большинстве случаев ваша команда будет выглядеть так:

netsh http add sslcert ipport=: appid= certhash= certstorename= clientcertnegotiation=enable

Если у вас несколько привязок SSL, вы повторите процесс для каждого из них. Надеюсь, это поможет спасти кого-то еще часы и часы головной боли, вызванные этой проблемой.

EDIT: По моему опыту, вы не можете запустить команду netsh http add sslcert из командной строки напрямую. Сначала вам нужно ввести запрос netsh, набрав netsh а затем выпустите команду, например http add sslcert ipport=... чтобы она работала.

Для всех, кто когда-либо ищет ошибку WCF IIS 413: запрашивать сущность крупным и использовать службу WCF в Sharepoint, это информация для вас. Параметры в хосте приложения и web.config, предлагаемые в других сайтах / сообщениях, не работают в SharePoint, если вы используете MultipleBaseAddressBasicHttpBindingServiceHostFactory. Вы можете использовать SP Powershell для получения службы SPWebService.Content, создать новый объект SPWcvSettings и обновить настройки, как указано выше для вашей службы (они не будут существовать). Не забудьте просто использовать имя службы (например, [yourservice.svc]) при создании и добавлении настроек. См. Этот сайт для получения дополнительной информации https://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service

В моем случае мне пришлось увеличить размер «Максимальный размер полученного сообщения» в поле «Прием» в BizTalk. Это также имеет значение по умолчанию 64K и поэтому каждое сообщение было отброшено BizTAlk, независимо от того, что я настроил в своем web.config

Я смог решить это, выполнив фиктивный вызов (например, IsAlive, возвращающий true) непосредственно перед запросом с большим контентом на том же канале / клиенте wcf. По-видимому, переговоры ssl выполняются при первом вызове. Поэтому нет необходимости увеличивать размер загружаемого файла.

Для меня настройка uploadReadAheadSize на int.MaxValue также устранила проблему, также увеличив ограничения на привязку WCF.

Похоже, что при использовании SSL весь объект сущности запроса предварительно загружен, для которого используется это свойство метабазы.

Для получения дополнительной информации см .:

Страница не отображалась, поскольку объект запроса слишком велик. iis7

для выдачи удаленный сервер возвратил неожиданный ответ: (413) Request Entity Too Large на WCF с Resful

см. мою конфигурацию объяснения

                                                                  

В моем случае, я получал это сообщение об ошибке, потому что я изменил пространство имен службы и тег служб, указав на более старое пространство имен. Я обновил пространство имен, и ошибка исчезла:

     />   
  • Как получить рабочий путь приложения wcf?
  • Каковы различия между веб-службами WCF и ASMX?
  • Как использовать WSDL-файл для создания службы WCF (не звонить)
  • Передача сложных объектов в службу restа WCF
  • Получить все IP-адреса на машине
  • В модели веб-программирования WCF можно написать рабочий контракт с массивом параметров строки запроса (то есть с тем же именем)?
  • Конечные точки REST / SOAP для службы WCF
  • В настоящий момент точка останова не будет удалена. Для этого документа в приложении Silverlight не были загружены никакие символы
  • Динамическое изменение URL-адреса URL-адреса веб-службы WCF через файл конфигурации
  • В чем разница между WCF Web API и ASP.NET Web API
  • Управление сложными файлами Web.Config между средами развертывания
  • Давайте будем гением компьютера.