Я написал службу WCF для .NET 4.0, которая размещена на моей системе Windows 7 x64
Ultimate с IIS 7.5. Один из методов службы имеет в качестве аргумента «объект», и я пытаюсь отправить байт [], который содержит изображение. Пока размер файла этой картинки меньше, чем ок. 48КБ, все идет хорошо. Но если я пытаюсь загрузить картинку большего размера, служба WCF возвращает ошибку: (413) Request Entity Too Large.
так что, конечно, я потратил 3 часа на поиск сообщения об ошибке, и каждая тема, которую я видел по этой теме, предлагает повысить свойство uploadReadAheadSize. Поэтому я использовал следующие команды (10485760 = 10 МБ):
"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"
"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"
Я также использовал IIS Manager для установки значения, открыв сайт и перейдя в «Редактор конфигурации» в разделе «Управление». К сожалению, я все еще получаю ошибку Request Entity Too Large, и это очень расстраивает!
Так кто-нибудь знает, что еще я могу попытаться исправить эту ошибку?
Ответы:
Это не проблема IIS, а проблема WCF. WCF по умолчанию ограничивает сообщения до 65 КБ, чтобы избежать атаки типа «отказ в обслуживании» с большими сообщениями. Также, если вы не используете MTOM, он отправляет byte [] в строку, закодированную в base64 (увеличение на 33%) => 48 КБ * 1,33 = 64 КБ
Чтобы решить эту проблему, вы должны перенастроить службу для приема больших сообщений. Эта проблема ранее вызвала ошибку 400 Bad Request, но в более новой версии WCF начал использовать 413, который является правильным кодом состояния для этого типа ошибки.
Вы должны установить
maxReceivedMessageSize
в своем переплете. Вы также можете установитьreaderQuotas
.источник
У меня была такая же проблема с IIS 7.5 с REST-службой WCF. Попытка загрузить через POST любой файл выше 65 КБ, и он вернет ошибку 413 «Запрос объекта слишком велик».
Первое, что вам нужно понять, это то, какую привязку вы настроили в файле web.config. Вот отличная статья ...
BasicHttpBinding против WsHttpBinding против WebHttpBinding
Если у вас есть служба REST, вам необходимо настроить ее как «webHttpBinding». Вот исправление:
источник
У меня была такая же проблема и установка
uploadReadAheadSize
решена:http://www.iis.net/configreference/system.webserver/serverruntime
«Значение должно быть между 0 и 2147483647».
Это легко установить в applicationHost.config-fle, если вы не хотите делать команду cmd.
Находится в
WindowsFOLDER\System32\inetsrv\config
(сервер 2008).Вы должны открыть его с помощью блокнота. Сделайте резервную копию файла в первую очередь.
Согласно комментариям в конфиге, рекомендуется разблокировать разделы с помощью тега местоположения:
Таким образом, вы можете написать внизу (так как он не существует раньше). Я пишу
maxvalue
здесь - напишите свою ценность, если хотите.</configuration>
Например, если вы поместили его в последний раз , вы знаете, где он у вас есть.Надеюсь, что решит ваши проблемы. Для меня это была проблема с SSL, когда слишком много сообщений замораживало приложение, вызывая ошибку (413) Request Entity Too Large .
источник
maxReceivedMessageSize
значение int.MaxValue, это помогло. Интересно, есть ли какие-либо серьезные проблемы с установкой этой опции на int.MaxValue?Я получал это сообщение об ошибке, хотя у меня были
max
настройки, установленные в привязке моего файла конфигурации службы WCF:Казалось, что эти параметры привязки не были применены, таким образом, следующее сообщение об ошибке:
,
Эта проблема
Я понял , что
name=""
атрибут в<service>
меткеweb.config
является не свободным текстовым полем, как я думал , что это было. Это полное название реализации договора на обслуживание, как указано на этой странице документации .Если это не совпадает, то настройки привязки не будут применены!
Я надеюсь, что это спасет кого-то от боли ...
источник
Если вы столкнулись с этой проблемой, несмотря на то, что пробовали все решения в этой теме, и вы подключаетесь к службе через SSL (например, https), это может помочь:
http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top
Подводя итог (в случае, если ссылка умирает в будущем), если ваши запросы достаточно велики, согласование сертификата между клиентом и службой будет случайным образом терпеть неудачу. Чтобы этого не происходило, вам нужно включить определенные настройки в привязках SSL. С вашего сервера IIS, вот шаги, которые вам нужно сделать:
netsh http show sslcert
. Это даст вам вашу текущую конфигурацию. Вам захочется как-то сохранить это, чтобы вы могли ссылаться на него позже.netsh http delete sslcert <ipaddress>:<port>
где<ipaddress>:<port>
находится IP: порт, показанный в конфигурации, которую вы сохранили ранее.netsh http add sslcert
(MSDN), но в большинстве случаев ваша команда будет выглядеть так:netsh http add sslcert ipport=<ipaddress>:<port> appid=<application ID from saved config including the {}> certhash=<certificate hash from saved config> certstorename=<certificate store name from saved config> clientcertnegotiation=enable
Если у вас есть несколько привязок SSL, вы повторите процедуру для каждой из них. Надеюсь, это поможет кому-то сэкономить часы и часы головной боли, вызванной этой проблемой.
РЕДАКТИРОВАТЬ: По моему опыту, вы не можете запустить
netsh http add sslcert
команду из командной строки напрямую. Вам нужно будет сначала ввести приглашение netsh, набрав,netsh
а затем выполнить команду,http add sslcert ipport=...
чтобы она заработала.источник
Это помогло мне решить проблему (одна строка - разделить для удобства чтения / копирования):
источник
Для меня установка значения
uploadReadAheadSize
int.MaxValue также устранила проблему после увеличения ограничений на привязку WCF.Кажется, что при использовании SSL предварительно загружается все тело объекта запроса, для которого используется это свойство метабазы.
Для получения дополнительной информации см .:
Страница не отображалась, поскольку объект запроса слишком велик. iis7
источник
Для всех, кто когда-либо искал ошибку 413 WCF IIS: запросить объект большого размера и использовать службу WCF в Sharepoint, эта информация для вас. Параметры в приложении host и 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. Это также имеет значение по умолчанию 64 КБ, поэтому BizTAlk отклоняет каждое сообщение независимо от того, что я настроил в своем файле web.config.
источник
Я смог решить эту проблему, выполнив фиктивный вызов (например, IsAlive, возвращающий true) непосредственно перед запросом с большим контентом на том же канале / клиенте wcf. Судя по всему, ssl-связь происходит при первом вызове. Так что нет необходимости увеличивать Uploadreadaheadsize.
источник
для проблемы удаленный сервер возвратил неожиданный ответ: (413) Слишком большой объект запроса на WCF с Resful
пожалуйста, смотрите мои объяснения конфигурации
источник
В моем случае я получал это сообщение об ошибке, потому что менялось пространство имен службы, а тег служб указывался на старое пространство имен. Я обновил пространство имен, и ошибка исчезла:
источник
Получил похожую ошибку на IIS Express с Visual Studio 2017.
Решите это, отредактировав
\.vs\config\applicationhost.config
. ПереключениеserverRuntime
изDeny
кAllow
следующим образом:Если это значение не редактируется, вы получите сообщение об ошибке, подобное этому при установке
uploadReadAheadSize
:Затем отредактируйте
Web.config
со следующими значениями:источник