WCF – Como aumentar a cota de tamanho da mensagem

Eu tenho um serviço WCF que retorna 1000 registros do database para o cliente. Eu tenho um cliente ASP.NET WCF (eu adicionei referência de serviço no projeto de aplicativo da web asp.net para consumir WCF).

Eu recebo a seguinte mensagem quando executo o aplicativo cliente:

A cota de tamanho máximo da mensagem para mensagens de input (65536) foi excedida. Para aumentar a cota, use a propriedade MaxReceivedMessageSize no elemento de binding apropriado.

Qualquer ajuda? Como aumentar a cota do tamanho da mensagem?

Você vai querer algo assim para aumentar as cotas de tamanho de mensagem, no arquivo App.config ou Web.config :

       

E use o nome de binding em sua configuração de terminal, por exemplo

 ... bindingConfiguration="basicHttp" ... 

A justificativa para os valores é simples, eles são suficientemente grandes para acomodar a maioria das mensagens. Você pode ajustar esse número para atender às suas necessidades. O baixo valor padrão é basicamente para evitar ataques do tipo DOS. Tornar 20000000 permitiria que um ataque DOS distribuído fosse eficaz, o tamanho padrão de 64k exigiria um número muito grande de clientes para dominar a maioria dos servidores atualmente.

Se você ainda estiver recebendo essa mensagem de erro ao usar o Cliente de Teste do WCF, é porque o cliente tem uma configuração MaxBufferSize separada.

Para corrigir o problema:

  1. Clique com o botão direito do mouse no nó do arquivo de configuração na parte inferior da tree
  2. Selecione Editar com SvcConfigEditor

Uma lista de configurações editáveis ​​será exibida, incluindo MaxBufferSize.

Nota: Os clientes proxy gerados automaticamente também configuram MaxBufferSize para 65536 por padrão.

Se você estiver criando suas ligações do WCF dinamicamente, aqui está o código a ser usado:

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

O cliente de teste do WCF tem sua própria configuração de cliente.

Execute o cliente de teste e role até o final. Se você clicar duas vezes no nó Config File, verá a representação XML. Como você pode ver, o maxReceivedMessageSize é 65536 .

Para editar isso, clique com o SvcConfigEditor nó da tree Arquivo de configuração e selecione Editar com SvcConfigEditor . Quando o editor abrir, expanda Bindings e clique duas vezes na binding que foi gerada automaticamente.

Você pode editar todas as propriedades aqui, incluindo maxReceivedMessageSize . Quando terminar, clique em Arquivo – Salvar .

Por fim, quando você estiver de volta na janela Cliente de Teste do WCF, clique em Ferramentas – Opções .

OBSERVAÇÃO : Desmarque a configuração Sempre gerar nova geração ao iniciar serviços .

Eu encontrei o caminho mais fácil

— clique com o botão direito do mouse no webconfig ou no arquivo de configuração do aplicativo e clique em EDITAR CONFIGURAÇÃO DO WCF e acessar bingdigs ans select yore service e mostrar no lado direito maxReciveMessageSize dar um grande número —

Eu resolvo o problema … como segue

                    

             

Eu resolvi meu problema no Bing Maps WPF no meu projeto usando CalculateRoute (). A solução no meu caso foi configurar o maxReceivedMessageSize e maxReceivedMessageSize no atributo “httpTransport” para a seção “customBinding”.

Eu configurei no arquivo applications.config (es. MyApp.config) essa configuração:

                         

Outra coisa importante a considerar da minha experiência ..

Eu aconselharia fortemente que NÃO maximizasse o maxBufferPoolSize, porque os buffers do pool nunca são liberados até que o domínio do aplicativo (ou seja, o Pool de Aplicativos) seja reciclado.

Um período de alto tráfego pode causar muita memory a ser usada e nunca liberada.

Mais detalhes aqui:

Não se esqueça de que o app.config do ponto de input de execução será considerado, não o do projeto de biblioteca de classs que gerencia as chamadas de serviço da Web, se houver uma.

Por exemplo, se você obtiver o erro durante a execução do teste de unidade, precisará configurar a configuração apropriada no projeto de teste.

Eu recebi este erro ao usar essas configurações no web.config

 System.ServiceModel.ServiceActivationException 

Eu defino configurações como esta:

               

Para HTTP:

        

Para TCP:

        

IMPORTANTE:

Se você tentar passar um object complexo que tenha muitos objects conectados (por exemplo: uma estrutura de dados em tree, uma lista que tenha muitos objects …), a comunicação falhará, independentemente de como você aumentou as Cotas. Nesses casos, você deve aumentar a contagem de objects contidos:

    ...     

Para mim, tudo o que precisei fazer foi adicionar maxReceivedMessageSize="2147483647" ao app.config do cliente. O servidor não foi tocado.