Usuário com melhor resposta
Método WCF Retornando Mais de 2000 registros da erro

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
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
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>
-
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.
- Editado Manoel Bruno P. Lima terça-feira, 26 de julho de 2011 13:44 erro de ortografia.
-
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.
- Editado Manoel Bruno P. Lima terça-feira, 26 de julho de 2011 14:11 Adicionando informação
-
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
-
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.