none
Método WCF Retornando Mais de 2000 registros da erro RRS feed

  • Pergunta

  • Boa Tarde, Pessoal.

     

    Tenho um método em um serviço wcf que me retorna um List de uma classe com mais ou menos 1500 registros de uma vez só com isso o wcf me retorna o seguinte erro:

    "The remote server returned an error: NotFound", quando executo o mesmo método com alguns fitros para retornar menos registros funciona perfeitamente, creio que o problema seja a quantidade de dados que esta sendo gerada. 

    Será que preciso configurar algo no servidor ou no serviço?

     

    Att

    segunda-feira, 25 de julho de 2011 20:16

Respostas

  • Boas Manoel,

    Uma dica que pode ajudar a conseguir mais informações sobre a causa da exception é utilizar o WCF Tracing. Lembro que uma vez tive problemas com o tamanho da mensagem e utilizando o tracing, consegui descobrir o motivo real do erro. No meu caso, apesar de ja ter aumentado o tamanho nas configurações, ainda assim obtinha um erro falando sobre o tamanho das mensagens. Depois de configurar o tracing, descobri o real motivo do erro. Nesse link voce pode ver como habilitar no seu arquivo *.config o tracing. No meu caso, faltou adicionar uma seção no meu arquivo *.config que segue abaixo para conhecimento:

     

    <endpointBehaviors>

         <behavior name="tcpServiceBehavior">

           <dataContractSerializer maxItemsInObjectGraph="(quantidade de bytes)"/>

         </behavior>

     </endpointBehaviors>

     

     

    Abraços


    Daniel Torres Coding is fun :)
    • Editado Daniel T Torres sexta-feira, 29 de julho de 2011 14:11 Remoção de dados confidenciais
    • Marcado como Resposta Manoel Bruno P. Lima terça-feira, 2 de agosto de 2011 20:31
    sexta-feira, 29 de julho de 2011 14:09

Todas as Respostas

  • Fala Manoel.

    Não sei se pode te ajudar, mas me ajudou uma vez. Tenta aí...

    <basicHttpBinding>
        <binding name="basicHttpBindingRegConfig" maxBufferSize="(quantidade de bytes)"
         maxReceivedMessageSize="(quantidade de bytes)">
         <readerQuotas maxArrayLength="(quantidade de bytes)" />
        </binding>
    
    

    segunda-feira, 25 de julho de 2011 23:47
  • Bom Dia, Fábio.

     

    Fiz as alterações e mesmo assim não deu certo continua retornando a mesma mensagem;

    Li em um tópico que isso poderia ajudar mas também não resolveu serve para aumentar o tempo limite de upload do site.

     

     

    <configuration>
    <system.web>
    <httpRuntime maxRequestLength="2097151" executionTimeout="3600" />
    


     

     

    Att.


    terça-feira, 26 de julho de 2011 13:43
  • Bom Dia, 

     

    Não sei se ajuda mas o erro é gerado dentro da classe Reference.cs, neste método.

     

     

       public System.Collections.ObjectModel.ObservableCollection<SuporteWeb.ServiceWeb.Atendimento> EndCarregaAtendimentoPorFiltro(System.IAsyncResult result) {
        object[] _args = new object[0];
        System.Collections.ObjectModel.ObservableCollection<SuporteWeb.ServiceWeb.Atendimento> _result = ((System.Collections.ObjectModel.ObservableCollection<SuporteWeb.ServiceWeb.Atendimento>)(base.EndInvoke("CarregaAtendimentoPorFiltro", _args, result)));
        return _result;
       }
    

     


    e me retorna a seguinte mensagem:

    CommunicationException was unhandled by user code.

    The Remote Server returned an error:NotFound.

     

    Também consegui gerar o seguinte erro:

    End has already been called on this asynchronous result object.

     

    Att. 


    terça-feira, 26 de julho de 2011 14:02
  • Boas Manoel,

    Uma dica que pode ajudar a conseguir mais informações sobre a causa da exception é utilizar o WCF Tracing. Lembro que uma vez tive problemas com o tamanho da mensagem e utilizando o tracing, consegui descobrir o motivo real do erro. No meu caso, apesar de ja ter aumentado o tamanho nas configurações, ainda assim obtinha um erro falando sobre o tamanho das mensagens. Depois de configurar o tracing, descobri o real motivo do erro. Nesse link voce pode ver como habilitar no seu arquivo *.config o tracing. No meu caso, faltou adicionar uma seção no meu arquivo *.config que segue abaixo para conhecimento:

     

    <endpointBehaviors>

         <behavior name="tcpServiceBehavior">

           <dataContractSerializer maxItemsInObjectGraph="(quantidade de bytes)"/>

         </behavior>

     </endpointBehaviors>

     

     

    Abraços


    Daniel Torres Coding is fun :)
    • Editado Daniel T Torres sexta-feira, 29 de julho de 2011 14:11 Remoção de dados confidenciais
    • Marcado como Resposta Manoel Bruno P. Lima terça-feira, 2 de agosto de 2011 20:31
    sexta-feira, 29 de julho de 2011 14:09
  • Boa Tarde, Daniel.

     

    Daniel muito boa a dica , utilizei o WCF Tracing e detectei a mesma situação que ocorreu com você após incluir o código abaixo em minha aplicação consigo retornar todos os registros da tabela de uma unica vez que tem mais ou menos 30.000 registros.

     

     

     <behaviors>
      <behavior name="">
       <serviceMetadata httpGetEnabled="true" />
       <serviceDebug includeExceptionDetailInFaults="false" />
       <dataContractSerializer maxItemsInObjectGraph="2147483647"/> /* <---- LINHA INCLUÍDA */
      </behavior>
      </serviceBehaviors>
     </behaviors>
    


     

    Att, Muito Obrigado.


    • Editado Manoel Bruno P. Lima terça-feira, 2 de agosto de 2011 20:32 Inclusão de mais informações.
    terça-feira, 2 de agosto de 2011 20:31