发送大于100mb的消息时出现WCF错误400错误请求

时间:2019-01-15 13:41:02

标签: wcf soap web-config

我做了我的第一个WCF服务,我在这里接收必须处理的数据。当我一次发送大量的100mb肥皂消息数据时,会收到错误400 Bad Request的答复。

我尝试设置其他问题中引用的maxReceivedMessageSize,maxBufferSize,maxAllowedContentLength,readerQuotas,但似乎没有任何作用,或者只是使该服务根本不起作用。

这些是我的web.config中的当前设置

<services>
  <service name="RMQServices.RMQ_WS1" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="webHttp" contract="RMQServices.RMQService" binding="basicHttpBinding" bindingConfiguration="myBasic" />
    </service>
</services>

<bindings>
    <basicHttpBinding>
        <binding name="myBasic" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:30:00">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxArrayLength="2147483647"/>
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>

<requestFiltering>          
    <requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>

我是否仍缺少配置中的某些内容以使其正常工作并接受更大的请求?

编辑: 如果我通过服务引用发送数据,那么它甚至可以接受1GB的肥皂消息。但是,如果我尝试通过带有预建SOAP XML的HttpWebRequest发送它,那么它仍然会返回Bad Request。因此问题似乎出在我如何发送数据上。

2 个答案:

答案 0 :(得分:0)

确保您的客户端配置也具有这些值

<client>
      <endpoint address="[address]" binding="basicHttpBinding" bindingConfiguration="myBasic" contract="" name="Name" />
</client>

然后添加

<bindings>


    <basicHttpBinding>
        <binding name="myBasic" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:30:00">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxArrayLength="2147483647"/>
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>

如果这不起作用,请从绑定中删除安全性,然后验证

答案 1 :(得分:0)

请尝试添加以下代码段。

    <behaviors>
      <serviceBehaviors>
        <behavior name="mybehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.web>
    <httpRuntime maxRequestLength="2147483647" executionTimeout="3600" />
  </system.web>
</configuration>

此外,不要忘记在客户端和服务器端之间应用配置(您还应该在客户端和服务器端端点上都添加此配置)。
随时让我知道问题是否仍然存在。