c# - 请求实体太大 WCF REST 服务
问题描述
您好,我在上传大小(188KB 和 5 KB)的小文件时收到“请求实体太大”错误!。我添加了 maxAllowedContentLength ,maxBufferPoolSize maxStringContentLength, maxArrayLength, maxBytesPerRead 但仍然有错误 - 这是我的配置文件。
我添加的任何内容似乎都无法解决该错误。我将上述参数的值设置为非常大的数字。
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<remove name="LocalSqlServer"/>
<add name="LocalSqlServer" connectionString="Server=SHOUSHOUPC\SQL2016; Initial Catalog=db; User ID=sa; Password=123456; Connect Timeout=10000; pooling='true'; Max Pool Size=200"/>
</connectionStrings>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
<add key="HOST" value=""/>
<add key="SID" value=""/>
<add key="UserID" value=""/>
<add key="Password" value=""/>
<add key="CC" value=""/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.6"/>
<httpRuntime targetFramework="4.5" enableVersionHeader="false" maxRequestLength="2097151"/>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
</httpModules>
<sessionState timeout="2"/>
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="MOH.MOHServices">
<endpoint behaviorConfiguration="webHttpServiceBehavior" binding="webHttpBinding"
contract="MOH.IMOHServices" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttpServiceBehavior">
<!-- Important this is the behavior that makes a normal WCF service to REST based service-->
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceAuthorization serviceAuthorizationManagerType="MOH.RestAuthorizationManager, MOH"/>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceThrottling maxConcurrentCalls="16" maxConcurrentInstances="1000" maxConcurrentSessions="10"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
<readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<security>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="false"/>
<add verb="TRACE" allowed="false"/>
<add verb="HEAD" allowed="false"/>
</verbs>
<requestLimits maxAllowedContentLength="2000000000" maxUrl="4096" maxQueryString="9999999"/>
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<remove name="ApplicationInsightsWebTracking"/>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler"/>
</modules>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="false"/>
<validation validateIntegratedModeConfiguration="false"/>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload"/>
<add name="X-Frame-Options" value="DENY"/>
<add name="X-Content-Type-Options" value="nosniff"/>
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
服务的痕迹:
跟踪显示以下消息: 已超出传入邮件的最大邮件大小配额 (65536)。要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。
解决方案
哥们,如果你想创建Restful风格的Web服务,我们修改webhttpbinding配置,使用webhttpbinding部分而不是basichttpbinding部分。
<bindings> <basicHttpBinding> <binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text"> <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/> </binding> </basicHttpBinding> </bindings>
这是WCF4.0新特性提供的简化配置。
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" name="httpbinding">
<security mode="None">
</security>
<readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147473647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior>
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="webHttpBinding" scheme="http" bindingConfiguration="httpbinding" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
此外,主要原因是 MaxReceivedMessageSize 属性引起的,您也可以只设置该属性。如果有什么我可以帮忙的,请随时告诉我。
推荐阅读
- google-colaboratory - /bin/bash: ./darknet: No such file or directory 问题
- java - 为什么在迭代 HashMap 时在 IF 块中添加元素会起作用?
- arrays - 如何检查数组中元素的位置?
- apache-kafka - KTable-KTable 外键连接语义
- ansible - Ansible 用户模块:如何将 UID 定义为默认设置?
- sqlite - 按时间戳分组 sqlite3
- c++ - c++中动态内存分配的问题
- python - 压缩包含所有内容的文件夹,而不保留 Python 中的目录结构
- stripe-payments - Stripe - 在多个目的地之间分期付款
- javascript - 如何在 Express 中识别用户是否为管理员?