2011-09-19 13 views
8

che ho visto questo problema postato un milione di volte, ma nessuna delle soluzioni hanno lavorato per me ... Così qui vado:Problema con grandi richieste in WCF

Quando si chiama un servizio WCF ricevo il seguente errore:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://BlanketImportService.ServiceContracts/2011/06:request . The InnerException message was 'There was an error deserializing the object of type BlanketImport.BlanketImportRequest. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 44440.'. Please see InnerException for more details.

ho modificato il readerQuotas sia sul client server, e applicate il tag bindingConfiguration.

Ecco la configurazione del server:

<bindings> 
    <basicHttpBinding> 
    <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="BlanketImport"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" bindingNamespace="http://BlanketImportService.ServiceContracts/2011/06" contract="BlanketImport.IBlanketImport"> 
    </endpoint> 
    </service> 
</services> 

E la configurazione client:

<bindings> 
    <basicHttpBinding> 
     <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost/BlanketImport/BlanketService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" contract="BlanketServiceReference.IBlanketService" 
     name="BasicHttpBinding_IBlanketService" /> 
    </client> 
+0

Il nome del servizio è solo "BlanketImport" o è sotto uno spazio dei nomi (come BlanketImport.BlanketImport)? Il valore dell'attributo "nome" dell'elemento '' deve essere il * nome completo del servizio * (spazio dei nomi + nome del tipo), altrimenti WCF non lo troverà. – carlosfigueira

+0

È il 2015 e le impostazioni di configurazione del wcf continuano ad essere un enigma per molti di noi. – abhi

risposta

18

trovato la soluzione ... Ma ancora molto strano!

Se rimuovo l'attributo nome dal tag di associazione e l'attributo bindingConfiguration dal tag endpoint, tutto funziona. Ciò significa che la configurazione baseHttpBinding è la configurazione predefinita per tutti gli endpoint basicHttpBinding

+1

Ottimo: se contrassegni la tua risposta come soluzione, riceverai un badge. :) – Lars

+0

Grazie per la soluzione! La configurazione della WCF è troppo ingannevole –

+0

Ho trascorso 3 giorni a lavorare sullo stesso problema fino a quando non ho trovato la soluzione. Grazie!!! – Copeleto

2

Ho avuto lo stesso problema durante il tentativo di caricare file utilizzando WCF utilizzando una configurazione di associazione con nome. Questo ha a che fare con le modifiche in WCF 4.0 e configurazione "semplificata" (vedi MSDN)

FYI: Ho provato di tutto per risolvere questo problema; il parametro per il servizio era un array di byte, quindi lo abbiamo rimosso e utilizzato un flusso, provato a cambiare il buffering rispetto alla modalità streaming e ovviamente le 1,5 milioni di opzioni di configurazione per cambiare le dimensioni che non venivano mai rilevate con una configurazione chiamata.

Davvero molto strano, ma con il tuo suggerimento.

+0

+1 per il collegamento –

0

Ho avuto un problema simile in cui il binding denominato non è stato utilizzato dall'endpoint. Il mio problema era un refuso nel nome del servizio. Come ha detto Livewire, la configurazione semplificata di WCF 4 crea automaticamente un endpoint e il mio endpoint definito non lo sovrascriveva.

Problemi correlati