2009-08-27 11 views
15

Mam następujący Server Side app.config dla usługi WCF:WCF maxReceivedMessageSize nie są odczytywane z config

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="default" maxReceivedMessageSize="5000000"> 
      <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="Core.TOAService.Service1Behavior" 
     name="Core.TOAService.TOAService"> 
     <endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Core.TOAService.Service1Behavior"> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Gdy próbuję i przekazać tę usługę largish plik (tylko ~ 250KB), otrzymuję wyjątkiem zapisywane w pliku svclog:

maksymalna kwota długości dla przychodzących wiadomości (65536) jest przekroczona. Aby zwiększyć limit, użyj właściwości MaxReceivedMessageSize na odpowiedniego elementu wiążącego.

Jak widać z sekcji wiązania na górze config, próbowałem ustawić maxReceivedMessageSize do 5000000, ale obsługa nadal myśli, że jest ustawiony domyślnie 65536. Wszelkie pomysły, co jest nie tak lub który jest "właściwym" elementem wiążącym?

Odpowiedz

27

Jest więcej ustawień :-) Spróbuj "maxBufferPoolSize" i "maxBufferSize" na tagu <binding>.

Ale największym problemem jest: twój punkt końcowy ma nie odniesienie do konfiguracji wiązania!

<endpoint address="" 
      binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 

Trzeba dodać odniesienie do niej tak, że staje się przydatna - tylko nazywając to „default” nie działa .....

<endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="default" 
      contract="Core.TOAService.ITOAService"> 

Jesteś wyprzedza swoich czasów ;-) W WCF 4 (z .NET 4.0 - jakiś czas później w tym roku 2009), będziesz mógł zdefiniować "domyślne konfiguracje bindowania" bez konieczności jawnego nadawania im nazw i odwoływania się do nich - ale na razie musisz stworzyć link między twoim punktem końcowym a jego powiązaniem i dowolną konfiguracją powiązania (lub zachowania)!

Marc

+0

Tak, musisz odwołać się do konfiguracji powiązania. Zmiany bufora prawdopodobnie nie są konieczne. –

+0

Nigdy nie jest jasne, czy i które z trzech zmian bufora są naprawdę potrzebne - pomaga spróbować i zobaczyć. Naprawdę nie ma dobrej, obszernej dokumentacji i objaśnienia, jak poprawić te ustawienia, niestety ... –

+0

Doh, serwer mnie za skorzystanie z VS2010 do zbudowania usługi 3.5! Wielkie dzięki, to naprawiło. –

1

Istnieje kilka miejsc, w których należy ustawić rozmiar. W twoim przypadku myślę, że musisz dodać limity odczytu. Oto przykład:

<basicHttpBinding> 
    <binding name="httpBasicBinding_Service" closeTimeout="00:03:00" 
     openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00" 
     maxBufferSize="2000001" 
     maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001"> 
     <readerQuotas maxDepth="2000001" maxStringContentLength="2000001" 
     maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" /> 
    </binding> 
    </basicHttpBinding> 
15

Jeśli nadal ten komunikat o błędzie podczas korzystania z testowego klienta WCF, to dlatego, że klient ma osobny MaxBufferSize ustawienia.

Aby rozwiązać ten problem:

  1. Kliknij prawym przyciskiem myszki na węzła Config pliku na dole drzewa
  2. Wybierz Edycja z SvcConfigEditor

listę pojawią się edytowalne ustawienia, w tym MaxBufferSize.

UWAGA:Automatycznie generowane klienci proxy ustawić również MaxBufferSize do 65536 domyślnie.

+1

Dobry połów! To rozwiązało mój problem ... –

+0

DZIĘKUJEMY !!! – RoeeK

Powiązane problemy