WCF - Como Aumentar Tamanho da mensagem Quota

votos
409

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

Eu recebo a seguinte mensagem quando eu executar o aplicativo cliente:

A cota de tamanho máximo de mensagem para as mensagens recebidas (65536) foi excedido. Para aumentar a quota, use a propriedade MaxReceivedMessageSize no elemento de ligação apropriado.

Qualquer ajuda? Como aumentar a cota de tamanho mensagem?

Publicado 19/05/2009 em 19:04
fonte usuário
Em outras línguas...                            


13 respostas

votos
537

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

<bindings>
    <basicHttpBinding>
        <binding name="basicHttp" allowCookies="true"
                 maxReceivedMessageSize="20000000" 
                 maxBufferSize="20000000"
                 maxBufferPoolSize="20000000">
            <readerQuotas maxDepth="32" 
                 maxArrayLength="200000000"
                 maxStringContentLength="200000000"/>
        </binding>
    </basicHttpBinding>
</bindings>

E usar o nome obrigatório em sua configuração endpoint por exemplo,

...
bindingConfiguration="basicHttp"
...

A justificação para os valores é simples, eles são suficientemente grande para acomodar a maioria das mensagens. Você pode ajustar esse número para atender às suas necessidades. O valor padrão baixo é basicamente lá para evitar ataques do tipo DOS. Tornando-20000000 permitiria um ataque DoS distribuído para ser eficaz, o tamanho padrão de 64k exigiria um número muito grande de clientes para dominar a maioria dos servidores nos dias de hoje.

Respondeu 19/05/2009 em 19:06
fonte usuário

votos
134

Se você ainda está recebendo esta mensagem de erro ao usar o cliente de teste do WCF, é porque o cliente tem uma separada MaxBufferSize configuração.

Para corrigir o problema:

  1. Botão direito do mouse sobre o arquivo de configuração do nó na parte inferior da árvore
  2. Selecione Editar com SvcConfigEditor

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

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

Respondeu 05/08/2010 em 07:11
fonte usuário

votos
83

Se você estiver criando suas ligações WCF dinamicamente aqui está o código para usar:

BasicHttpBinding httpBinding = new BasicHttpBinding();
httpBinding.MaxReceivedMessageSize = Int32.MaxValue;
httpBinding.MaxBufferSize = Int32.MaxValue;
// Commented next statement since it is not required
// httpBinding.MaxBufferPoolSize = Int32.MaxValue;
Respondeu 02/02/2011 em 11:07
fonte usuário

votos
39

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

Execute o cliente de teste e vá até o final. Se você clicar duas vezes no nó do arquivo de configuração que você vai ver a representação XML. Como você pode ver o maxReceivedMessageSizeé 65536.

Para editar este, clique direito no nó da árvore arquivo de configuração e selecione Editar com SvcConfigEditor. Quando o editor abre expandir Ligações e dê um duplo clique na ligação que foi gerado automaticamente.

Você pode editar todas as propriedades aqui, inclusive maxReceivedMessageSize. Quando estiver pronto, clique Arquivo - Salvar .

Por último, quando você está de volta na janela do Cliente WCF teste, clique em Ferramentas - Opções .

NOTA : Desmarque a configuração Sempre regenerar ao lançar serviços .

Respondeu 27/06/2012 em 21:58
fonte usuário

votos
14

Eu encontrei o caminho mais fácil

--- clique direito no arquivo de configuração webconfig ou aplicativo e clique em Editar WCF CONFIGURAÇÃO e tem que bingdigs ans seleccionar o serviço de outrora e mostrar o lado direito maxReciveMessageSize dar um grande número ---

Respondeu 30/03/2015 em 06:39
fonte usuário

votos
7

I resolver o problema ... como se segue

    <bindings>
  <netTcpBinding>
    <binding name="ECMSBindingConfig" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
      maxReceivedMessageSize="2147483647" portSharingEnabled="true">
      <readerQuotas maxArrayLength="2147483647" maxNameTableCharCount="2147483647"
          maxStringContentLength="2147483647" maxDepth="2147483647"
          maxBytesPerRead="2147483647" />
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ECMSServiceBehavior">
      <dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceTimeouts transactionTimeout="00:10:00" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="100"
        maxConcurrentInstances="100" />
    </behavior>
  </serviceBehaviors>
</behaviors>
Respondeu 22/03/2011 em 06:36
fonte usuário

votos
6

Eu resolvi meu problema no Bing Maps WPF no meu projeto Usando CalculateRoute (). A solução no meu caso foi definindo o maxReceivedMessageSize e maxReceivedMessageSize no atributo "HttpTransport" para a seção "customBinding".

I definido no arquivo applications.config (es myApp.config.) Esta configuração:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IGeocodeService" />
            <binding name="BasicHttpBinding_IRouteService" />
        </basicHttpBinding>
        <customBinding>
            <binding name="CustomBinding_IGeocodeService">
                <binaryMessageEncoding />
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
            </binding>
            <binding name="CustomBinding_IRouteService">
                <binaryMessageEncoding />
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IGeocodeService"
            contract="BingServices.IGeocodeService" name="BasicHttpBinding_IGeocodeService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc/binaryHttp"
            binding="customBinding" bindingConfiguration="CustomBinding_IGeocodeService"
            contract="BingServices.IGeocodeService" name="CustomBinding_IGeocodeService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRouteService"
            contract="BingServices.IRouteService" name="BasicHttpBinding_IRouteService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc/binaryHttp"
            binding="customBinding" bindingConfiguration="CustomBinding_IRouteService"
            contract="BingServices.IRouteService" name="CustomBinding_IRouteService" />
    </client>
</system.serviceModel>
Respondeu 11/05/2013 em 01:07
fonte usuário

votos
6

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding_Username" maxReceivedMessageSize="20000000"          maxBufferPoolSize="20000000">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" establishSecurityContext="false"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<client>
  <endpoint
            binding="wsHttpBinding"
            bindingConfiguration="wsHttpBinding_Username"
            contract="Exchange.Exweb.ExchangeServices.ExchangeServicesGenericProxy.ExchangeServicesType"
            name="ServicesFacadeEndpoint" />
</client>

Respondeu 26/01/2012 em 13:38
fonte usuário

votos
2

Outra coisa importante a considerar a partir de minha experiência ..

Eu fortemente conselho para não maximizar MaxBufferPoolSize, porque buffers da piscina nunca são liberados até que o aplicativo-domínio (ou seja, o pool de aplicativos) recicla.

Um período de alto tráfego pode causar uma grande quantidade de memória para ser usado e nunca lançado.

Mais detalhes aqui:

Respondeu 24/10/2016 em 05:27
fonte usuário

votos
2

Não se esqueça que o app.config do ponto de entrada de execução será considerada, e não a um em projeto de biblioteca de classe gestão Web-Service chamadas se houver.

Por exemplo, se você obter o erro durante a execução de teste de unidade, você precisa configurar configuração apropriada no projeto de teste.

Respondeu 26/07/2013 em 08:54
fonte usuário

votos
1

Para HTTP:

<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000" 
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
        <readerQuotas maxDepth="200" 
             maxArrayLength="200000000"
             maxBytesPerRead="4096"
             maxStringContentLength="200000000"
             maxNameTableCharCount="16384"/>
    </binding>
  </basicHttpBinding>
</bindings>

Para TCP:

<bindings>
  <netTcpBinding>
    <binding name="tcpBinding"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
      <readerQuotas maxDepth="200"
           maxArrayLength="200000000"
           maxStringContentLength="200000000"
           maxBytesPerRead="4096"
           maxNameTableCharCount="16384"/>
    </binding>
  </netTcpBinding>
</bindings>

IMPORTANTE:

Se você tentar passar objeto complexo que tem muitos objetos conectados (por exemplo: uma estrutura de dados árvore, uma lista que tem muitos objetos ...), a comunicação irá falhar, não importa como você aumentou as cotas. Nesses casos, você deve aumentar os objetos que contêm contar:

<behaviors>
  <serviceBehaviors>
    <behavior name="NewBehavior">
      ...
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
Respondeu 25/07/2017 em 09:58
fonte usuário

votos
1

eu tenho esse erro ao usar essa configuração no web.config

System.ServiceModel.ServiceActivationException

i definir as configurações como este:

      <service name="idst.Controllers.wcf.Service_Talks">
    <endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_TalksAspNetAjaxBehavior"
      binding="webHttpBinding" contract="idst.Controllers.wcf.Service_Talks" />
  </service>
  <service name="idst.Controllers.wcf.Service_Project">
    <endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_ProjectAspNetAjaxBehavior"
      binding="basicHttpBinding" bindingConfiguration="" bindingName="largBasicHttp"
      contract="idst.Controllers.wcf.Service_Project" />
  </service>
</services>

<bindings>
<basicHttpBinding>
    <binding name="largBasicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
        <readerQuotas maxDepth="32"
             maxArrayLength="200000000"
             maxStringContentLength="200000000"/>
    </binding>
</basicHttpBinding>

Respondeu 22/01/2013 em 10:53
fonte usuário

votos
0

Para mim, tudo que eu tinha que fazer é adicionar maxReceivedMessageSize="2147483647"ao app.config cliente. O servidor deixado intocado.

Respondeu 24/07/2018 em 14:50
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more