WCF 400对大数据的错误请求

时间:2010-09-04 17:59:38

标签: .net wcf rest

我正在.NET 4.0中开发REST服务,这是我的web.config文件 我是.NET的新手,已经苦苦挣扎了两天,以了解为什么我无法上传超过60KB的数据。

我通过谷歌搜索得知,必须增加BufferSize并尝试以不同的方式修改web.config文件,这种方式从未奏效。有人能帮我吗。

此致 亚太区首席技术官Matt

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>   <system.web>
     <compilation debug="true" targetFramework="4.0">
       <assemblies>
         <add assembly="System.Data.Entity,
 Version=4.0.0.0, Culture=neutral,
 PublicKeyToken=b77a5c561934e089" />
       </assemblies>
     </compilation> <httpRuntime maxRequestLength="1048576"/>  
 </system.web>   <system.webServer>
     <modules runAllManagedModulesForAllRequests="true">
       <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0,
 Culture=neutral,
 PublicKeyToken=b03f5f7f11d50a3a" />
     </modules>   </system.webServer>   <system.serviceModel>
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
     <standardEndpoints>
       <webHttpEndpoint>
         <!-- 
             Configure the WCF REST service base address via the
 global.asax.cs file and the default
 endpoint 
             via the attributes on the <standardEndpoint> element below
         -->
         <standardEndpoint name="" helpEnabled="true"
 automaticFormatSelectionEnabled="true"
 />
       </webHttpEndpoint>
     </standardEndpoints> <services>

 <service name=""
 behaviorConfiguration="UpdateRealtimeWebPortfolioStructure.Service1Behavior"
 > <!-- Service Endpoints -->

 <endpoint address=""
 binding="wsHttpBinding"
 contract="UpdateRealtimeWebPortfolioStructure.IService1"
 bindingConfiguration="higherMessageSize_WS"><!--
 Upon deployment, the following
 identity element should be removed or
 replaced to reflect the

 identity under which the deployed
 service runs. If removed, WCF will
 infer an appropriate identity

 automatically.

 --> <identity>

 <dns value="localhost" /> </identity>

 </endpoint> <endpoint address="mex"
 binding="mexHttpBinding"
 contract="IMetadataExchange"
 bindingConfiguration="higherMessageSize_MEX"/>

 </service> </services>

 <bindings> <wsHttpBinding>

 <binding name="higherMessageSize_WS"
 closeTimeout="10:01:00"

 openTimeout="10:01:00"
 receiveTimeout="10:10:00"
 sendTimeout="10:01:00"

 bypassProxyOnLocal="false"
 transactionFlow="false"
 hostNameComparisonMode="StrongWildcard"

 maxBufferPoolSize="524288000"
 maxReceivedMessageSize="65536000"
 messageEncoding="Text"

 textEncoding="utf-8"
 useDefaultWebProxy="true"
 allowCookies="false"></binding>
 </wsHttpBinding>

 <mexHttpBinding> <binding
 name="higherMessageSize_MEX" />

 </mexHttpBinding>


 </bindings><behaviors>
 <serviceBehaviors>

 <behavior name=""> <!-- To avoid
 disclosing metadata information, set
 the value below to false and remove
 the metadata endpoint above before
 deployment -->

 <serviceMetadata httpGetEnabled="true"
 /> <dataContractSerializer
 maxItemsInObjectGraph="2147483647"/>

 <!-- To receive exception details in
 faults for debugging purposes, set the
 value below to true. Set to false
 before deployment to avoid disclosing
 exception information -->
 <serviceDebug
 includeExceptionDetailInFaults="false"
 />

 </behavior> </serviceBehaviors>

 </behaviors>   </system.serviceModel> 
 <connectionStrings>
     <add name="GeoContainer" connectionString="metadata=res://*/Geo.csdl|res://*/Geo.ssdl|res://*/Geo.msl;provider=System.Data.SqlClient;provider
 connection string=&quot;Data
 Source=YQLABSSERVER\SQLEXPRESS;Initial
 Catalog=Geo;Integrated
 Security=True;MultipleActiveResultSets=True&quot;"
 providerName="System.Data.EntityClient"
 />   
 </connectionStrings>
 </configuration>

2 个答案:

答案 0 :(得分:3)

我认为使用ASP.NET兼容性在REST场景中增加消息大小所需的system.serviceModel的唯一配置更改是:

<system.serviceModel>
  <bindings>
    <!-- default binding configration used for all REST services -->
    <webHttpBinding>
      <!-- max allowed message size incresed to 500 000 Bytes -->
      <binding maxBufferSize="500000" maxReceivedMessageSize="500000" />
    </webHttpBinding>
  </bindings>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

答案 1 :(得分:0)

我通过向<serviceEndPoint>标记添加maxBufferSize标头获得了解决方案。现在工作正常