2013-01-31 10 views
25

Il mio invito al mio servizio Web WCF non riesce con System.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large.MaxReceivedMessageSize non fissa il 413: Entità richiesta troppo grande

Controllo Fiddler, vedo che sto inviando:

Content-Length: 149839

Che è oltre 65 KB.

Attivazione WCF analisi sul server, vedo:

System.ServiceModel.ProtocolException: quota delle dimensioni Il messaggio massima per i messaggi in entrata (65536) è stato superato. Per aumentare la quota , utilizzare la proprietà MaxReceivedMessageSize sull'elemento di collegamento appropriato.

L'aggiunta di questa proprietà non risolve il problema.

Ho provato solo con quella proprietà e (più tardi) con vari altri che i post hanno suggerito. Ecco quello che ho attualmente (sul server):

<basicHttpBinding> 

    <binding name="PricerServiceSoap" 
    closeTimeout="00:10:00" openTimeout="00:10:00" 
    receiveTimeout="00:10:00" sendTimeout="00:10:00" 
    maxBufferSize="2147483647"  
    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 

    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
     maxNameTableCharCount="2147483647" /> 
    </binding> 

</basicHttpBinding> 

Il mio unico punto finale (sotto <client>) è:

<endpoint address="/NetPricingService/Service.asmx" 
    binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap" 
    contract="Pricing.PricerService.PricerServiceSoap" 
    name="PricerServiceSoap" /> 

Ho anche aggiunto:

<dataContractSerializer maxItemsInObjectGraph="2147483647"/> 

sotto <behavior>.

ho anche eseguito (per IIS 7):

%windir%\system32\inetsrv\appcmd set config "WebServicesDev/PricingService" 
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600 
-commitpath:apphost 

Niente fa alcuna differenza.

Un problema è che si tratta di un servizio WCF destinato a sostituire un servizio ASMX precedente. Lo scheletro del servizio è stato generato con svcutil dal WSDL esistente. Non riesco a modificare le configurazioni del client (e i client sono in più lingue). Il progetto del mio client di prova ha importato il servizio con Aggiungi riferimento Web (sotto Add Service Reference/Advanced), quindi non ho configurazione WCF. Tuttavia, il client di test funziona se lo indico al servizio ASMX precedente.

Come posso risolvere o diagnosticare questo?

Ulteriori informazioni

Se uso il Configuration Editor di Microsoft servizio per generare la configurazione (impostazione MaxReceivedMessageSize e MaxBufferSize), funziona. Il problema è che l'endpoint viene quindi specificato in <service> e non mi consente di specificare l'indirizzo relativo /NetPricingService/Service.asmx. Se modifico i collegamenti nella configurazione generata da svcutil (dove l'endpoint è sotto <client>), non funziona con richieste di grandi dimensioni.

risposta

24

La risposta mi stava fissando in faccia.

La configurazione generata da svcutil era per il client. Lo stavo usando sul server.

Stavo modificando i binding per gli endpoint specificati in <client>, che non ha fatto assolutamente alcuna differenza per il servizio.

L'aggiunta di un opportuno endpoint <service> e l'impostazione di maxReceivedMessageSize e maxBufferSize sull'attacco hanno risolto il problema.

+3

Per aggiungere specificità alla risposta di TrueWill: è necessario aggiungere il tag al web.config, che ospita il servizio web non cambia il tag nel web.config in cui il servizio è legato. Nel tag aggiungere un riferimento a un nuovo collegamento tramite bindingconfiguration. Creare la nuova associazione sotto il nodo binding e aggiungere le impostazioni maxBufferPoolSize e maxReceivedMessageSize lì. –

+1

Grazie per questo. Potrei passare tutto il giorno senza accorgermene. –

+1

Questo finalmente mi ha portato alla mia soluzione. La "semplice" configurazione .NET4 in cui la sezione '' non è "richiesta" non utilizzava la mia httpBinding .. aggiungendo esplicitamente il servizio con il binding risolto il problema. – user2864740

23

Ho avuto un problema simile. Per quanto mi riguarda, il mio problema era che il mio endpoint non nominava esplicitamente il binding usando bindingConfiguration e quindi deve averne usato uno predefinito da qualche parte.

ho avuto:

<webHttpBinding> 
    <binding 
     name="myXmlHttpBinding" 
     maxReceivedMessageSize="10485760" 
     maxBufferSize="10485760"> 
     <readerQuotas 
      maxDepth="2147483647" 
      maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647"/> 
     <security mode="None"/> 
    </binding> 
</webHttpBinding> 

e il mio punto finale definito come:

<service 
    name="blah.SomeService"> 
    <endpoint 
     address="" 
     behaviorConfiguration="WebHttpBehavior" 
     binding="webHttpBinding" 
     contract="blah.ISomeService"> 

     <identity> 
      <dns value="localhost"/> 
     </identity> 
    </endpoint> 
</service> 

Ha funzionato una volta ho cambiato il punto finale a:

<service name="blah.SomeService"> 
    <endpoint address="" 
     behaviorConfiguration="WebHttpBehavior" 
     binding="webHttpBinding" 
     bindingConfiguration="myXmlHttpBinding" 
     contract="blah.ISomeService"> 
     <identity> 
     <dns value="localhost"/> 
     </identity> 
    </endpoint> 
    </service> 
0

Aggiungere questo risolve per me:

<bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_Example" 
maxBufferSize="2147483647" 
maxReceivedMessageSize="2147483647"> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
1

provato da 10 blog diversi e il mio collega l'ha capito. abbiamo aggiunto una sezione BasicHttpsBinding all'interno della sezione basicHttpBinding. Abbiamo un servizio webapi che chiama wcf. il metodo webapi stava rilevando l'errore di entità troppo grande quando chiamava il metodo di servizio wcf. Questa modifica è stata applicata nel file web.config del servizio wcf.

Problemi correlati