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:
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.