Błąd 400 (złe żądanie): maxReceivedMessageSize nie jest brane pod uwagę dla mojej usługi WCF

Istnieje wiele powiązanych pytań dotyczących SO (prawie ten sam tytuł), żaden z nich nie pomógł mi rozwiązać mojego problemu. Proszę nie zamykać mojego pytania jako duplikatu przed jego przeczytaniem. Dzięki.

Obecnie używam WCF do ujawnienia usługi internetowej (SOAP, HTTP). Obecnie jest wdrażany w IIS Express. Moim problemem jest to, że nie mogę wykorzystać mojej usługi od mojego klienta. Mój klient otrzymujeHTTP Error 400 Bad request wyjątek.

Następnie aktywowałem śledzenie po stronie serwera, aby zobaczyć, co się właściwie dzieje, oto co otrzymuję:

Przetłumaczyłem komunikat o błędzie na angielski: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..

Właściwie to nie wymaga wyjaśnień. Ponieważ moja wiadomość SOAP jest dość ciężka, prawdopodobnie przekracza limit 64 KB.

Postanowiłem rozszerzyć ten limit w konfiguracji wiązania. Oto mój web.config (po stronie serwera):

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

Jak widać, wszystkie rozmiary są ustawione naint.MaxValue.

Zmodyfikowałem również mojego klienta app.config, tutaj jest:

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

Następnie ponownie wdrożyłem usługę, a problem wciąż tu był (HTTP 400, Bad request po stronie klienta +MaxReceivedMessageSize limited to 65536 po stronie serwera).

Następnie przetestowałem moją usługę za pomocą bardzo małej wiadomości SOAP:wszystko jest w porządku. Problem polega na tym, że moja wiadomość jest większa niż 64 KB.

Wczoraj spędziłem 2 godziny próbując dowiedzieć się, jaki jest problem z moją konfiguracją ... Prawdopodobnie coś oczywistego, ale nie mogę znaleźć ...

Sprawdziłem wiele informacji na temat tego problemu, w 95% przypadków twórca zapomniał podaćbindingConfiguration atrybut w punkcie końcowym usługi. Jak widać w moim web.config powyżej, to jest dla mnie w porządku.

Potem znalazłemkolejne pytanie na temat stackoverflow dotyczące (prawie) tego samego problemu.

Jak powiedział autor w swoim pytaniu, ustawiając nazwę konfiguracji wiązania nastring.Empty „naprawia” problem:

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

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

Przy użyciu domyślnego wiązania wszystko działa dobrze. Nie mogę rozwiązać mojego problemu za pomocą tego obejścia, ponieważ muszę określić wiele różnych konfiguracji powiązań w tym samym pliku web.config.

Ponownie odtwarzam tutaj pytanie, ponieważ w rzeczywistości nie są to te same warunki: moja usługa nie jest hostowana samodzielnie, ale hostowana w IIS Express (lub IIS 7.5, testowany, ten sam problem).

Znalazłempodobny problem tutaj z usługą hostowaną samodzielnie, a problem związany był z tą specyfiką. Myślę więc, że jest coś innego między tymi pytaniami 2 SO.

Myślę, że w mojej konfiguracji jest coś oczywiście nie tak, ale nie mogę znaleźć tego. Każda pomoc doceniana.

questionAnswers(2)

yourAnswerToTheQuestion