使用Kentico 10,我们遇到的问题是,对于转到[servername] / rest / services的任何请求,将最大请求限制大小提高到默认的64KB限制以上。超过该限制的所有POST或PUT请求都会遇到服务器错误413 - 请求实体太大。在应用程序的其他部分(例如Kentico Admin)中,此限制不存在,因为我们能够以更高的数据量发送POST和PUT请求。
我们已尝试将以下配置添加到我们的web.config文件中,但这不会影响64KB限制:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2097151" />
</requestFiltering>
</security>
</system.webServer>
此外,我们已使用以下设置向web.config添加了位置元素:
<location path="rest">
<system.web>
<httpRuntime executionTimeout="2400" maxRequestLength="2097151" />
</system.web>
<system.webServer>
<serverRuntime uploadReadAheadSize="2000000000" maxRequestEntityAllowed="32000000" />
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" />
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
</system.webServer>
</location>
上述配置更改都没有对超过64KB的POST或PUT请求产生任何影响。
Kentico通过URLRewritingEngine将任何请求路由到[servername] / rest / ...,并根据调用类型将这些请求重写为DocumentRESTService.svc,ObjectTranslationRESTService.svc或RESTService.svc。因此,将配置部分添加到system.serviceModel并不会影响这些服务的使用。
我们如何更改Kentico Web服务的此限制?
答案 0 :(得分:1)
这可以通过将以下代码段添加到web.config文件末尾的<system.serviceModel>
部分来完成:
将<webHttpBinding>
元素插入<bindings>
子部分:
<webHttpBinding>
<!-- Limits set to 10 MB (specified value in bytes) -->
<binding name="RESTQuotaBinding" maxReceivedMessageSize="10485760" maxBufferPoolSize="10485760" maxBufferSize="10485760" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
<readerQuotas maxDepth="32" maxStringContentLength="10485760" maxArrayLength="10485760" maxBytesPerRead="10485760" />
<security mode="None" />
</binding>
</webHttpBinding>
在<service>
子部分下添加<services>
元素:
<service name="CMS.WebServices.RESTService">
<host>
<baseAddresses>
<add baseAddress="http://localhost/KenticoCMS/rest" />
</baseAddresses>
</host>
<endpoint address="" bindingConfiguration="RESTQuotaBinding" binding="webHttpBinding" contract="CMS.WebServices.IRESTService" />
</service>