Я'написал службу WCF с .NET 4.0, которая размещена на моей системе Windows 7 x64
Ultimate с IIS 7.5.
Один из методов службы имеет 'объект' в качестве аргумента, и я'пытаюсь отправить байт[], который содержит картинку.
Пока размер файла этой картинки не превышает примерно 48 КБ, все идет хорошо. Но если я пытаюсь загрузить картинку большего размера, служба WCF возвращает ошибку: (413) Request Entity Too Large.
.
Конечно, я потратил 3 часа, гуглил сообщение об ошибке, и каждая тема, которую я видел, предлагает поднять свойство 'uploadReadAheadSize'.
Итак, я сделал следующее (10485760 = 10MB):
"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 по умолчанию ограничивает размер сообщений до 65KB, чтобы избежать атаки отказа в обслуживании с большими сообщениями. Также, если вы не используете MTOM, он посылает byte[] в base64 закодированную строку (увеличение размера на 33%) => 48KB * 1,33 = 64KB
Чтобы решить эту проблему, вы должны перенастроить свой сервис на прием сообщений большего размера. Ранее эта проблема вызывала ошибку 400 Bad Request, но в новой версии WCF начал использовать 413, который является правильным кодом состояния для этого типа ошибки.
Вам необходимо установить maxReceivedMessageSize
в вашей привязке. Вам также может потребоваться установить readerQuotas
.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="10485760">
<readerQuotas ... />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
У меня была такая же проблема с IIS 7.5 с WCF REST Service. Пытался загрузить через POST любой файл размером более 65k и он возвращал ошибку 413 "Request Entity too large".
Первое, что вам нужно понять, это какой тип привязки вы настроили в web.config. Вот отличная статья...
https://stackoverflow.com/questions/2650785/basichttpbinding-vs-wshttpbinding-vs-webhttpbinding
Если у вас REST сервис, то вам нужно настроить его как "webHttpBinding". Вот' исправление:
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647" transferMode="Streamed">
</binding>
</webHttpBinding>
</bindings>
У меня была такая же проблема, и установка uploadReadAheadSize
решила ее:
http://www.iis.net/configreference/system.webserver/serverruntime
"Значение должно быть между 0 и 2147483647."
Это легко устанавливается в applicationHost.config-fle, если вы не хотите делать cmd-штуку.
Он находится в WindowsFOLDER\System32\inetsrv\config
(2008 сервер).
Вы должны открыть его с помощью блокнота. Сначала сделайте резервную копию файла.
Согласно комментариям в config, рекомендуемый способ разблокирования разделов - использование тега location:
<location path="Default Web Site" overrideMode="Allow">
<system.webServer>
<asp />
</system.webServer>
</location>"
Таким образом, вы можете написать в самом низу (так как раньше его не существовало). Я пишу здесь maxvalue
- напишите свое собственное значение, если хотите.
<location path="THENAMEOFTHESITEYOUHAVE" overrideMode="Allow">
<system.webServer>
<asp />
<serverRuntime uploadReadAheadSize="2147483647" />
</system.webServer>
</location>
Если вы поместите его последним перед </configuration>
, например, вы будете знать, где он у вас находится.
Надеюсь, это решит ваши проблемы. У меня это была проблема с накладными расходами SSL, когда слишком большое количество сообщений замораживало приложение, выдавая ошибку (413) Request Entity Too Large.
Я получил это сообщение об ошибке, хотя у меня настройки на "МАКС" устанавливается в привязке мой файл конфигурации службы WCF:
<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>
Казалось, что эти параметры привязки были'т быть применены, таким образом, следующее сообщение об ошибке:
и IIS7 - (413) слишком большой объект запроса при подключении к сервису.
Я понял, что имя=" и"
в атрибута в <обслуживание и GT; тег
из `веб.конфиг-это не свободного текстового поля, как я думал. Это полное имя реализации сервисного контракта как отмечалось в [в данном разделе документации][1].
Если это не'т соответствовать, то параметры привязки выиграл'т быть применены!
<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>
Я надеюсь, это спасет кому-то боль...
[1]: https://msdn.microsoft.com/en-us/library/ms733932(в=против 110).аспн
Это помогло мне решить проблему (одна линия - сплит для чтения / копирования-способность):
C:\Windows\System32\inetsrv\appcmd set config "YOUR_WEBSITE_NAME"
-section:system.webServer/serverRuntime /uploadReadAheadSize:"2147483647"
/commit:apphost
Если вы'вновь нарваться на эту проблему, несмотря на попытки все решения в этой теме, и вы'повторного подключения к услуге по протоколу SSL (например, HTTPS), это может помочь:
http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#топ
Подводя итог (в случае, если ссылка умрет в будущем), если ваши запросы достаточно большой переговорный сертификат между клиентом и службой будет выполнена случайным образом. Чтобы предотвратить это, вы'll необходимо, чтобы определенная установка на ваш привязки SSL. От сервера IIS, вот шаги, которые вы'll необходимо взять:
где в
<адрес>:<порту>` это IP:порт отображается в конфигурации, который вы сохранили ранее.команды netsh http добавьте sslcert номер ipport=в<адрес>:<порту> код=<приложения код из сохраненной конфигурации, в том числе {}> certhash=<сертификат хэш из сохраненной конфигурации> certstorename=<сертификат название магазина из сохраненной конфигурации> clientcertnegotiation=включить
Если у вас есть несколько Привязок SSL, вы'будете повторить этот процесс для каждого из них. Надеюсь, это поможет спасти кого-то еще часы и часы головной болью этот вопрос вызвал у меня.
Редактировать: в моем опыте, вы можете'т на самом деле запустить команды netsh http добавьте команду sslcert
из командной строки напрямую. Вы'll необходимо сначала ввести команду netsh приглашение ввода команды netsh и тогда вопрос вашей команды, как HTTP добавьте sslcert номер ipport=...
для того, чтобы он работал.
[1]: https://msdn.microsoft.com/en-us/library/windows/desktop/cc307220(В=и 85).аспн
Для меня, если uploadReadAheadSize` в инт.Максвеллову также исправлена проблема, после также увеличение лимитов на привязки WCF.
Похоже, что при использовании SSL, весь объект запроса орган поджат, для которых используется это свойство метабазы.
Для получения дополнительной информации см.:
Для тех, кто еще никогда не ищу ошибки в IIS службы WCF 413 : сущность запроса в большие и через службу WCF в SharePoint, это информация для вас. Настройки в приложения и web.конфигурации, предложенные в других сайтах/должностей Дон't работа в SharePoint при использовании MultipleBaseAddressBasicHttpBindingservicehostfactory. Вы можете использовать СП PowerShell, чтобы получить свойства spwebservice.Услуги по содержанию, создать новый объект SPWcvSettings и обновление параметров, как указано выше для вашего сервиса (они выиграли'т существуют). Помните, чтобы просто использовать имя сервиса (например, [yourservice.ВПВ]) при создании и добавлении параметров. См. этот сайт для получения дополнительной информации https://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service
В моем случае пришлось увеличить на "максимальный размер получаемых сообщений" в место приема в BizTalk. Что также имеет значение по умолчанию 64К и так каждое сообщение было отскочил с BizTalk независимо от того, что я настроен в web.конфиг
Есть похожие ошибки в IIS Express с визуальной студии 2017.
ошибка http 413.0 - слишком большой объект запроса
страницы не отображаются, потому что объект запроса слишком большой.
наиболее вероятные причины:
веб-сервер отказывается обслуживать запрос, потому что запрос В сущности, является слишком большим.
веб-сервер не может обслужить запрос, потому что он пытается согласование сертификата клиента, но сущность запроса слишком велика.
запрос на URL-адрес или физический сопоставление URL-адреса (т. е. физической путь файловой системы к URL'ы контент) слишком долго.
вещи, которые вы можете попробовать:
убедитесь, что запрос является допустимым.
если вы используете клиентские сертификаты, попробовать:
повышение system.webServer/serverRuntime@uploadReadAheadSize
настройка конечной точки SSL договариваться клиентских сертификатов в рамках первоначального квитирования SSL. (команды netsh http добавьте sslcert ... clientcertnegotiation=включить) .против\конфиг\файл applicationhost.конфиг
Решить это путем редактирования \.против\конфиг\файл applicationhost.конфигурации
. Переключатель serverRuntime " с "запретить" на " разрешить
такой:
<section name="serverRuntime" overrideModeDefault="Allow" />
Если это значение не редактируется, вы получаете ошибку при установке uploadReadAheadSize
:
ошибка http 500.19 - Внутренняя ошибка сервера
запрашиваемая страница недоступна из-за обзоры Данные конфигурации для страницы является недопустимым.
в этом разделе конфигурации не могут быть использованы на этот путь. Это происходит когда секция закрыта на родительском уровне. Блокировка либо По умолчанию (overrideModeDefault=на"запретить") смотрите, или установить прямо на месте и GT; тег С=С" overrideMode;запретить" или наследие директива allowoverride=то"ложные" по.
Затем редактировать веб.конфигурации со следующими значениями:
<system.webServer>
<serverRuntime uploadReadAheadSize="10485760" />
...
Я'вэ был в состоянии решить эту проблему путем выполнения холостой вызов ( например, потока isalive возвращает true ) просто перед запросом с большим содержанием в тот же Фос канала/клиента. Видимо, переговоры по протоколу SSL делается по первому зову. Так что не нужно увеличить Uploadreadaheadsize.
на вопрос удаленный сервер вернул неожиданный ответ: (413) слишком большой объект запроса на WCF с Resful
пожалуйста, см. Мой объяснить конфигурацию
<система.средство servicemodel> <клиент>
</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>
</система.средство servicemodel>
В моем случае, я получаю это сообщение об ошибке, потому что я был изменен служба'пространство имен S и тег услуг указано в старое пространство имен. Я обновил имен и исчезнуть ошибка:
<services>
<service name="My.Namespace.ServiceName"> <!-- Updated name -->
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="MyBindingConfiguratioName"
contract="My.Namespace.Interface" <!-- Updated contract -->
/>
</service>
</services>