如何增加发送到ADO.Net Data Services的数据大小?

时间:2009-01-11 23:48:02

标签: wcf-data-services

我有一个采用字节数组的数据服务。然后我有一个网页,试图将文件发送到该数据服务。如果文件很小(比如50kb)那么一切都按预期运行,但是如果文件很大(任何超过100kb)我在数据服务的保存更改调用上收到“BadRequest”错误消息。

有没有办法让更大的数据大小传递给数据服务?

编辑(更多细节):我已经设置了更高的maxRequestLength并尝试了一些webHttpBinding来增加maxReceivedMessageSize,但这些似乎没有帮助。

2 个答案:

答案 0 :(得分:5)

WCF服务可以处理的请求的最大大小由WCF绑定上的MaxReceivedMessageSize属性控制。 默认值为65536,超过400响应代码。

在托管服务的网站的web.config中,在部分中添加以下节点。

<system.serviceModel> 
<services> 
  <!-- The name of the service --> 
  <service name="NorthwindService"> 
    <!-- you can leave the address blank or specify your end point URI --> 
    <endpoint address ="YourServiceEndpoint" 
              binding="webHttpBinding" bindingConfiguration="higherMessageSize" 
     contract ="System.Data.Services.IRequestHandler"> 
    </endpoint> 
  </service> 
</services> 
<bindings> 
  <webHttpBinding> 
    <!-- configure the maxReceivedMessageSize  value to suit the max size of 
         the request ( in bytes ) you want the service to recieve--> 
    <binding name="higherMessageSize" maxReceivedMessageSize ="MaxMessageSize"/> 
  </webHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
</system.serviceModel>

如果在IIS上托管,ASP.Net请求大小限制也会导致大量请求被拒绝,您需要设置HttpRuntimeSection.MaxRequestLength属性。

<system.web> 
  <httpRuntime MaxRequestLength="ValueInKiloBytes" />
</system.web>

确定WCF是否在HTTP级别下向您展示了一个异常。您可以configure WCF tracing on the server-side从WCF层记录必要的信息。一旦进行了跟踪设置并重现了故障,请检查日志是否包含这些异常消息中的一个或两个。

System.ServiceModel.ProtocolException
"The maximum message size quota for incoming messages (65536) has been exceeded. 
To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element."

System.Web.HttpException
"Maximum request length exceeded."

如果您看到日志确实包含此消息,那么您可以确定该消息是由于消息大小而相应地应用此修复。

PD:请注意,您的表单必须使用"POST"方法。

答案 1 :(得分:3)

我还尝试编辑没有结果的web.config文件。我仍然得到同样的例外。

对我有用的解决方案是编辑 machine.config 文件,并在System.ServiceModel节点中添加以下行。

<standardEndpoints>
        <webHttpEndpoint>
            <standardEndpoint name="" maxReceivedMessageSize="16777216" maxBufferSize="16777216" />
        </webHttpEndpoint>
    </standardEndpoints>

我不知道这是否是正确的解决方案,但它对我有用。