2009-08-27 2 views
15

Ho un seguente app.config lato server per un servizio WCF:WCF MaxReceivedMessageSize non essere letto dal 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> 

Quando provo e passo di questo servizio un file abbastanza grande (solo ~ 250KB), ottengo un'eccezione registrato nel file svclog:

la quota massima dimensione del messaggio per i messaggi in arrivo (65536) è stato superato . Per aumentare la quota, utilizzare la proprietà MaxReceivedMessageSize su l'elemento di associazione appropriato.

Come si può vedere dalla sezione rilegatura in alto della configurazione, ho cercato di impostare il MaxReceivedMessageSize a 5.000.000 ma il servizio pensa ancora è impostato sul valore predefinito 65536. Tutte le idee su ciò che è sbagliato o qual è l'elemento vincolante "appropriato"?

risposta

27

Altre impostazioni :-) Prova "maxBufferPoolSize" e "maxBufferSize" nel tag <binding>.

Ma il problema più grande è: l'endpoint non fa riferimento a tale configurazione vincolante!

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

è necessario aggiungere un riferimento ad esso in modo che venga utile - solo definendola "default" non funziona .....

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

Sei in anticipo i tempi ;-) In WCF 4 (con .NET 4.0 - a partire dalla fine di quest'anno 2009), sarai in grado di definire "configurazioni di binding predefinite" senza doverle esplicitamente nominare e referenziare - ma per ora, devi creare un collegamento tra il tuo endpoint e il suo binding e qualsiasi configurazione di binding (o comportamento) che hai!

Marc

+0

Sì, è necessario fare riferimento alla configurazione di rilegatura. Le modifiche del buffer probabilmente non sono necessarie. –

+0

Non è mai abbastanza chiaro se e quale delle tre modifiche del buffer sia realmente necessaria: aiuta a provare e vedere. Non c'è davvero nessuna documentazione valida e completa e spiegazione su come modificare queste impostazioni, sfortunatamente .... –

+0

Doh, i server sono perfetti per usare VS2010 per creare un servizio 3.5! Molte grazie, questo è stato risolto. –

1

Ci sono molti posti che avete bisogno di impostare la dimensione. Nel tuo caso penso che sia necessario aggiungere quote di lettura. Ecco un esempio:

<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

Se si sta ancora ricevendo questo messaggio di errore durante l'utilizzo del client di prova WCF, è perché il cliente ha una separata MaxBufferSize impostazione.

per correggere il problema:

  1. Right-Click sul file di configurazione nodo al fondo dell'albero
  2. Selezionare Modifica con SvcConfigEditor

un elenco di appariranno le impostazioni modificabili, incluso MaxBufferSize.

Nota:generato automaticamente i client proxy impostati anche MaxBufferSize a 65536 per impostazione predefinita.

+1

Buona cattura! Questo ha risolto il mio problema ... –

+0

GRAZIE !!! – RoeeK