Quota di lunghezza massima dell’array

Sto scrivendo una piccola app WCF / WPF per ridimensionare le immagini, ma WCF mi sta dando dolore quando provo a inviare un’immagine del formato 28K al mio servizio dal client. Il servizio funziona correttamente quando invio immagini più piccole. Ho immediatamente pensato che si trattasse di un problema di configurazione e ho spostato il web sui post relativi alla proprietà MaxArrayLength nella mia configurazione di binding. Ive ha aumentato i limiti di queste impostazioni sia sul client che sul server al massimo 2147483647, ma ottengo ancora il seguente errore:

Il formattatore ha lanciato un’eccezione durante il tentativo di deserializzare il messaggio: Si è verificato un errore durante il tentativo di deserializzare il parametro http://mywebsite.com/services/servicecontracts/2009/01:OriginalImage . Il messaggio InnerException era “Si è verificato un errore nella deserializzazione dell’object di tipo System.Drawing.Image. La lunghezza massima della lunghezza dell’array (16384) è stata superata durante la lettura dei dati XML. Questa quota può essere aumentata modificando la proprietà MaxArrayLength sull’object XmlDictionaryReaderQuotas utilizzato durante la creazione del lettore XML. ‘. Si prega di consultare InnerException per maggiori dettagli.

Ho reso le mie configurazioni client e server uguali e hanno il seguente aspetto: Server:

                                  

e la mia configurazione del client è simile a:

                       

A prescindere da cosa imposto questi valori, ricevo comunque un errore nel dire che wcf non può serializzare il mio file perché è maggiore di 16384. Qualche idea?

Aggiornamento: l’indirizzo email nel tag userPrincipalName è stato modificato per la mia privacy

Il mio Male – Ho dimenticato di applicare la mia configurazione vincolante al mio endpoint nella mia configurazione lato server. La configurazione del server dovrebbe contenere:

                                   

Notare che bindingConfiguration = “NetTcpBinding_ImageResizerServiceContract” è stato aggiunto all’endpoint netTcp. La mia app ora funziona con immagini più grandi. Dolce.

Si prega di aggiungere nel binding.

Questo è il problema principale durante il caricamento e il download del byte [], ha risolto il mio problema.

      

Ho utilizzato Microsoft SDK SvcConfigEditor. Hai questo se usi Visual Studio (che ha la sua versione). È anche un download gratuito.

Sul tuo disco fisso (controlla sia Programmi che Programmi) (x86):

C: \ Programmi (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin \ NETFX 4.0 Strumenti \ SvcConfigEditor.exe

C: \ Programmi \ Microsoft SDK \ Windows \ v7.1 \ Bin \ NETFX 4.0 Strumenti \ SvcConfigEditor.exe

Se si dispone di più installazioni di Microsoft SDK, quale versione si utilizzerà dipenderà dalla versione di .NET in fase di sviluppo. Lo strumento genererà un errore per farti sapere che hai provato ad aprire il file .dll con la versione sbagliata.

Per utilizzare lo strumento, selezionare il file .dll del servizio e lasciare che lo strumento esegua il sollevamento pesante. Ciò è particolarmente utile se si dispone di servizi che comunicano con i servizi (servizi proxy). Inoltre, tieni presente che probabilmente avrai bisogno di un’impostazione di configurazione per il tuo client (all’applicazione) e per le configurazioni del server (sul webservice).

Mi mancava una configurazione sull’endpoint lato server. Ho dovuto fare due cose:

  1. Metti un endpoint sulla mia configurazione lato server, configurato usando SvcConfigEditor
  2. Ricordarsi di impostare MaxArrayLength nello strumento SvcConfigEditor

Inoltre, ASP.NET era troppo esigente riguardo questo valore, quindi potresti provare a semplificare il bind di configurazione e a distriggersrlo:

   

sta funzionando, in precedenza mostrava il riferimento a net.tcp: //myservice.com/Ac_Service.svc/mex durante la navigazione del servizio wcf, ma ora è http://myservice.com/Ac_Service.svc?wsdl

funzionerà anche in futuro, senza alcun problema.