Error 400 (solicitud incorrecta): maxReceivedMessageSize no se tuvo en cuenta para mi servicio WCF

Hay varias preguntas relacionadas sobre SO (casi el mismo título), ninguna de ellas me ayudó a solucionar mi problema. Por favor, no cierre mi pregunta como duplicado antes de leerla. Gracias.

Actualmente estoy usando WCF para exponer un servicio web (SOAP, HTTP). Se implementa en IIS Express por ahora. Mi problema es que no puedo administrar el servicio de mi cliente. Mi cliente recibe unHTTP Error 400 Bad request excepción.

Luego activé el rastreo en el lado del servidor para ver lo que realmente está sucediendo, esto es lo que obtengo:

He traducido el mensaje de error al 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..

Bastante se explica por sí mismo, en realidad. Como mi mensaje SOAP es bastante pesado, probablemente exceda el límite de 64 KB.

Decidí ampliar este límite en la configuración de enlace. Así que aquí está mi web.config (lado del 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 puedes ver, todos los tamaños están configurados paraint.MaxValue.

También he modificado la aplicación de mi cliente.config, aquí 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>

Luego volví a desplegar mi servicio, y el problema todavía estaba aquí (HTTP 400, Bad request en el lado del cliente +MaxReceivedMessageSize limited to 65536 en el lado del servidor).

Luego probé mi servicio con un mensaje SOAP muy pequeño:todo esta perfectamente bien. Entonces el problema es que mi mensaje es más grande que 64KB.

Ayer pasé 2 horas tratando de averiguar cuál es el problema con mi configuración ... Probablemente sea algo obvio, pero no puedo encontrar ...

He buscado mucho en Google sobre este problema, 95% de las veces el problema es que el desarrollador olvidó especificar elbindingConfiguration atributo en el punto extremo del servicio. Como puede ver en mi web.config anterior, está bien para mí.

Entonces he encontradootra pregunta sobre stackoverflow sobre el (casi) mismo problema.

Como dijo el autor en su pregunta, establecer el nombre de la configuración de enlace enstring.Empty "arregla" el problema:

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

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

Cuando se utiliza el enlace predeterminado, todo funciona bien. No puedo solucionar mi problema usando esta solución porque necesito especificar varias configuraciones de enlace diferentes en el mismo web.config.

Estoy recreando una pregunta aquí porque en realidad no son las mismas condiciones: mi servicio no es auto hospedado sino que está alojado en IIS Express (o IIS 7.5, probado, el mismo problema).

He encontrado unproblema similar aquí con un servicio auto hospedado, y el problema estaba relacionado con esta particularidad. Así que creo que hay algo diferente entre esas dos preguntas.

Supongo que hay algo obviamente mal en mi configuración, pero no puedo encontrar qué. Cualquier ayuda apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta