Ошибка 400 (неверный запрос): maxReceivedMessageSize не учитывается для моей службы WCF

There are multiple related questions on SO (almost same title), none of them helped me to fix my problem. Please do not close my question as duplicate before reading it. Thanks.

В настоящее время я использую WCF для предоставления веб-службы (SOAP, HTTP). В настоящее время он развернут в IIS Express. Моя проблема в том, что я не могу использовать мой сервис от моего клиента. Мой клиент получаетHTTP Error 400 Bad request исключение.

Затем я активировал трассировку на стороне сервера, чтобы увидеть, что на самом деле происходит, вот что я получаю:

enter image description here

Я перевел сообщение об ошибке на английский язык: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..

Довольно понятно, на самом деле. Поскольку мое сообщение SOAP довольно тяжелое, оно, вероятно, превышает ограничение в 64 КБ.

Я решил расширить этот предел в конфигурации привязки. Итак, вот мой web.config (на стороне сервера):

<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>

Как видите, все размеры установлены наint.MaxValue.

Я также изменил свой клиентский app.config, вот он:

<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>

Затем я снова развернул свой сервис, и проблема все еще была здесь (HTTP 400, Bad request на стороне клиента +MaxReceivedMessageSize limited to 65536 на стороне сервера).

Затем я протестировал свой сервис с очень маленьким SOAP-сообщением:everything is perfectly fine, Так что проблема в том, что мое сообщение больше 64 КБ.

Вчера я потратил 2 часа, пытаясь выяснить, в чем проблема с моей конфигурацией ... Возможно, что-то очевидно, но я не могу найти ...

Я много гуглил об этой проблеме, 95% времени проблема заключается в том, что разработчик забыл указатьbindingConfiguration атрибут в конечной точке службы. Как вы можете видеть в моем web.config выше, для меня это нормально.

Затем я нашелеще один вопрос по stackoverflow о (почти) той же проблеме.

Как сказал автор в своем вопросе, установка имени конфигурации привязки вstring.Empty & Quot; затруднительные & Quot; эта проблема:

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

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

При использовании привязки по умолчанию все работает нормально. Я не могу просто исправить мою проблему, используя этот обходной путь, потому что мне нужно указать несколько разных конфигураций привязки в одном файле web.config.

Я воссоздаю вопрос здесь, потому что на самом деле это не те же условия: моя служба не размещена самостоятельно, а размещена в IIS Express (или IIS 7.5, протестировано, та же проблема).

Я нашелпохожая проблема здесь с самостоятельным обслуживанием, и проблема была связана с этой особенностью. Так что я думаю, что есть что-то другое между этими двумя SO вопросами.

Я думаю, что-то явно не так в моей конфигурации, но я не могу найти что. Любая помощь приветствуется.

Ответы на вопрос(2)

Ваш ответ на вопрос