WCF – Come aumentare la quota delle dimensioni dei messaggi

Ho un servizio WCF che restituisce 1000 record dal database al client. Ho un client WCF di ASP.NET (ho aggiunto il riferimento al servizio nel progetto di applicazione web asp.net per consumare WCF).

Ottengo il messaggio seguente quando eseguo l’applicazione client:

La quota massima delle dimensioni dei messaggi per i messaggi in arrivo (65536) è stata superata. Per aumentare la quota, utilizzare la proprietà MaxReceivedMessageSize sull’elemento di collegamento appropriato.

Qualsiasi aiuto? Come aumentare la quota della dimensione del messaggio?

Vorresti qualcosa di simile per aumentare le quote delle dimensioni dei messaggi, nel file App.config o Web.config :

       

E usa il nome del bind nella tua configurazione endpoint es

 ... bindingConfiguration="basicHttp" ... 

La giustificazione per i valori è semplice, sono sufficientemente grandi per accogliere la maggior parte dei messaggi. È ansible sintonizzare quel numero per soddisfare le proprie esigenze. Il basso valore predefinito è fondamentalmente lì per prevenire attacchi di tipo DOS. Rendendolo 20000000 consentirebbe un attacco DOS distribuito per essere efficace, la dimensione predefinita di 64k richiederebbe un numero molto elevato di client per sopraffare la maggior parte dei server in questi giorni.

Se ricevi ancora questo messaggio di errore mentre usi il client di test WCF, è perché il client ha un’impostazione MaxBufferSize separata.

Per correggere il problema:

  1. Fare clic con il pulsante destro del mouse sul nodo File di configurazione nella parte inferiore dell’albero
  2. Seleziona Modifica con SvcConfigEditor

Apparirà un elenco di impostazioni modificabili, incluso MaxBufferSize.

Nota: i client proxy generati automaticamente impostano anche MaxBufferSize su 65536 per impostazione predefinita.

Se stai creando i binding WCF dynamicmente, ecco il codice da utilizzare:

 BasicHttpBinding httpBinding = new BasicHttpBinding(); httpBinding.MaxReceivedMessageSize = Int32.MaxValue; httpBinding.MaxBufferSize = Int32.MaxValue; // Commented next statement since it is not required // httpBinding.MaxBufferPoolSize = Int32.MaxValue; 

Il client di test WCF ha la propria configurazione client.

Esegui il client di prova e scorri fino in fondo. Se si fa doppio clic sul nodo File di configurazione, verrà visualizzata la rappresentazione XML. Come puoi vedere, maxReceivedMessageSize è 65536 .

Per modificare questo, fare clic con il SvcConfigEditor destro del nodo dell’albero File di configurazione e selezionare Modifica con SvcConfigEditor . Quando l’editor si apre espandi Bindings e fai doppio clic sul legame che è stato generato automaticamente.

Qui puoi modificare tutte le proprietà, incluso maxReceivedMessageSize . Quando hai finito fai clic su File – Salva .

Infine, quando si torna alla finestra Client Test WCF, fare clic su Strumenti – Opzioni .

NOTA : deselezionare la funzione Rigenera sempre durante l’avvio dei servizi .

Ho trovato il modo semplice

— fai clic con il tasto destro del mouse sul file di configurazione di app o webconfig e fai clic su MODIFICA CONFIGURAZIONE WCF e accedi a bingdigs e seleziona il servizio yore e lato destro mostra maxReciveMessageSize indica un numero elevato —

Risolvo il problema … come segue

                    

             

Ho risolto il mio problema su Bing Maps WPF sul mio progetto usando CalculateRoute (). La soluzione nel mio caso era impostare maxReceivedMessageSize e maxReceivedMessageSize sull’attributo “httpTransport” per la sezione “customBinding”.

Ho impostato nel file applications.config (es. MyApp.config) questa configurazione:

                         

Un’altra cosa importante da considerare dalla mia esperienza ..

Consiglio fortemente di NON massimizzare maxBufferPoolSize, perché i buffer del pool non vengono mai rilasciati fino a quando il dominio dell’app (ovvero il pool di applicazioni) non viene riciclato.

Un periodo di intenso traffico potrebbe causare l’utilizzo di molta memoria e non essere mai rilasciato.

Maggiori dettagli qui:

Non dimenticare che verrà considerato l’app.config del punto di ingresso dell’esecuzione, non quello nel progetto di libreria di classi che gestisce le chiamate al servizio Web se ce n’è uno.

Ad esempio, se si verifica l’errore durante l’esecuzione del test dell’unità, è necessario impostare la configurazione appropriata nel progetto di test.

ho questo errore quando uso queste impostazioni su web.config

 System.ServiceModel.ServiceActivationException 

ho impostato le impostazioni in questo modo:

               

Per HTTP:

        

Per TCP:

        

IMPORTANTE:

Se si tenta di passare un object complesso con molti oggetti connessi (ad es .: una struttura dati dell’albero, una lista con molti oggetti …), la comunicazione fallirà indipendentemente dal modo in cui si sono aumentate le quote. In questi casi, è necessario aumentare il conteggio degli oggetti contenenti:

    ...     

Per me, tutto ciò che dovevo fare è aggiungere maxReceivedMessageSize="2147483647" al client app.config. Il server non è stato toccato.