Erro 400 (solicitação incorreta): maxReceivedMessageSize não levado em consideração para o serviço WCF

Existem várias perguntas relacionadas sobre SO (quase o mesmo título), nenhuma delas me ajudou a consertar meu problema. Por favor, não feche minha pergunta como duplicada antes de lê-la. Obrigado.

Atualmente estou usando o WCF para expor um webservice (SOAP, HTTP). Ele está implantado no IIS Express por enquanto. Meu problema é que não consigo consumir meu serviço do meu cliente. Meu cliente recebe umHTTP Error 400 Bad request exceção.

Em seguida, eu ativei o rastreamento no lado do servidor para ver o que realmente está acontecendo, eis o que recebo:

Eu traduzi a mensagem de erro para o inglês: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..

Pretty auto-explicativo, na verdade. Como minha mensagem SOAP é bastante pesada, provavelmente excede o limite de 64 KB.

Eu decidi estender esse limite na configuração de ligação. Então aqui está o meu web.config (lado do servidor):

<code><services>
  <service name="MyServiceName">
    <endpoint binding="basicHttpBinding"
              bindingConfiguration="MyBindingConfiguration"
              bindingNamespace="http://my_namespace"
              contract="XXX.IMyContract" />
  </service>
</services>

<bindings>
  <basicHttpBinding>
    <binding name="MyBindingConfiguration"
             allowCookies="true"
             maxReceivedMessageSize="2147483647"
             maxBufferSize="2147483647"
             maxBufferPoolSize="2147483647">
      <readerQuotas maxDepth="32" maxArrayLength="2147483647" maxStringContentLength="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
</code>

Como você pode ver, todos os tamanhos estão definidos paraint.MaxValue.

Eu também modifiquei meu cliente app.config, aqui está:

<code><bindings>
  <basicHttpBinding>
    <binding name="MyBindingName"
             allowCookies="false"
             bypassProxyOnLocal="false"
             hostNameComparisonMode="StrongWildcard"
             maxBufferSize="2147483647"
             maxBufferPoolSize="2147483647"
             maxReceivedMessageSize="2147483647"
             messageEncoding="Text"
             textEncoding="utf-8"
             transferMode="Buffered"
             useDefaultWebProxy="true">

      <readerQuotas maxDepth="32"
                    maxStringContentLength="2147483647"
                    maxArrayLength="16384"
                    maxBytesPerRead="4096"
                    maxNameTableCharCount="16384" />

      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>

    </binding>
  </basicHttpBinding>
</bindings>

<client>
  <endpoint address="http://localhost:8083/myAddress.svc"
            binding="basicHttpBinding"
            bindingConfiguration="MyBindingName"
            contract="IMyContract"
            name="MyBindingName" />
</client>
</code>

Em seguida, reimplantei meu serviço, e o problema ainda estava aqui (HTTP 400, Bad request no lado do cliente +MaxReceivedMessageSize limited to 65536 no lado do servidor).

Em seguida, testei meu serviço com uma mensagem SOAP muito pequena:tudo está perfeitamente bem. Então o problema é que minha mensagem é maior que 64KB.

Passei 2 horas ontem tentando descobrir qual é o problema com a minha configuração ... Provavelmente algo óbvio, mas não consigo encontrar ...

Eu pesquisei muito sobre este problema, 95% do tempo o problema é o desenvolvedor esqueceu de especificar obindingConfiguration atributo no terminal de serviço. Como você pode ver no meu web.config acima, tudo bem para mim.

Então eu encontreioutra pergunta sobre stackoverflow sobre o (quase) mesmo problema.

Como o autor disse em sua pergunta, definindo o nome da configuração de ligação parastring.Empty "conserta" o problema:

<code><services>
  <service name="MyServiceName">
    <endpoint binding="basicHttpBinding"
              bindingConfiguration=""
...

<bindings>
  <basicHttpBinding>
    <binding name=""
...
</code>

Ao usar a ligação padrão, tudo funciona bem. Eu não posso simplesmente consertar meu problema usando essa solução porque preciso especificar várias configurações de ligação diferentes no mesmo web.config.

Estou recriando uma pergunta aqui porque não são realmente as mesmas condições: meu serviço não é auto-hospedado, mas hospedado no IIS Express (ou IIS 7.5, testado, mesmo problema).

Eu encontrei umquestão semelhante aqui com um serviço auto-hospedado, e o problema estava relacionado a essa particularidade. Então, acho que há algo diferente entre essas duas perguntas do SO.

Eu acho que há algo obviamente errado na minha configuração, mas não consigo encontrar o que. Qualquer ajuda apreciada.

questionAnswers(2)

yourAnswerToTheQuestion