(400)即使配额最大化也有不良请求

时间:2013-12-28 09:20:34

标签: c# wcf-binding

我有一个c#winform app。

我正在服务器上调用Web服务。

本质上我正在上传一个字节数组。

我知道配额,我已正确设置它们(我认为!)。

我尝试传递零字节,调用正常。

在我的测试中,我试图上传719280字节。

我收到400错误请求错误。

这是我的服务的web.config:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ThrottledBehavior">
          <serviceTimeouts transactionTimeout="0.00:00:30" />
          <serviceThrottling maxConcurrentCalls="64" 
                             maxConcurrentSessions="50" 
                             maxConcurrentInstances="1" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="Sync" behaviorConfiguration="ThrottledBehavior">
        <endpoint address="Uploader.svc" 
                  binding="basicHttpBinding"
                  bindingConfiguration="basicHttpBindingEndPoint" 
                  contract="ISync" name="wsUploader"  />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBindingEndPoint" 
                 maxReceivedMessageSize="2147483647" 
                 messageEncoding="Mtom" 
                 closeTimeout="00:02:00" openTimeout="00:02:00" 
                 maxBufferPoolSize="2147483647" >
          <readerQuotas maxArrayLength="2147483647" 
                        maxBytesPerRead="2147483647" 
                        maxDepth="2147483647" 
                        maxStringContentLength="2147483647"
                        maxNameTableCharCount="2147483647"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

3 个答案:

答案 0 :(得分:1)

增加

中的“maxRequestLength”值
<httpRuntime
      executionTimeout="1200"
      maxRequestLength="1024000"
      appRequestQueueLimit="300" />

<强>更新 转到绑定配置并将传输模式更改为流式传输

<bindings>
      <basicHttpBinding>
        <binding name="basicHttpBindingEndPoint" 
                 maxReceivedMessageSize="2147483647" 
                 transferMode="Streamed"

                 messageEncoding="Mtom" 
                 closeTimeout="00:02:00" openTimeout="00:02:00" 
                 maxBufferPoolSize="2147483647" >
          <readerQuotas maxArrayLength="2147483647" 
                        maxBytesPerRead="2147483647" 
                        maxDepth="2147483647" 
                        maxStringContentLength="2147483647"
                        maxNameTableCharCount="2147483647"/>
        </binding>
      </basicHttpBinding>
    </bindings>

答案 1 :(得分:1)

尝试启用跟踪(来源:MSDN),也许这会显示一些细节。 将其添加到您的web.config:

<configuration>
   <system.diagnostics>
      <sources>
            <source name="System.ServiceModel" 
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
               <add name="traceListener" 
                   type="System.Diagnostics.XmlWriterTraceListener" 
                   initializeData= "c:\log\Traces.svclog" />
            </listeners>
         </source>
      </sources>
   </system.diagnostics>
</configuration>

答案 2 :(得分:1)

我的特殊问题是我使用的是Throttled行为。此设置适用于小数据但不大。因此,将此绑定更改为正常/标准行为,如下所示:

    <behavior name="NormalBehaviour">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>

而不是使用它:

    <behavior name="ThrottledBehavior">
      <serviceTimeouts transactionTimeout="0.00:00:30" />
      <serviceThrottling maxConcurrentCalls="64" maxConcurrentSessions="50" maxConcurrentInstances="1" />
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>

为我工作。

这里的本质是'serviceThrottling'已被删除。我本来可以保留这个,但是我必须增加maxConcurrentCalls,maxConcurrentSessions和maxConcurrentInstances,我尝试但是对于受限制的行为反作用,因此需要花费更长的时间来处理。

感谢大家花时间去看这个