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

  • Pergunta

  • Boa tarde Pessoal

    Tenho um serviço WCF onde um metodo retorna uma lista de uma classe, porém quando o retorno é superior a 7000 registros da o erro:

    "The underlying connection was closed: The connection was closed unexpectedly."

    Todos os outros metodos de crude e uma busca inferior a 7000 registros funcionam. 

    desde já agradeço.

    quinta-feira, 9 de fevereiro de 2012 14:58

Respostas

Todas as Respostas

  • Boa tarde Edson,

    Voce pode dar uma olhada nesse artigo do Israel Aece que explica sobre os tamanhos e cotas do WCF.

    Um outro link para consulta no stackoverflow.

    E aqui um exemplo de onde efetuar as configurações.

    Valew lembrar que pra saber qual limite esta sendo excedido, voce pode configurar o tracing do WCF para saber a propriedade correta que tem que ser alterada. Segue outro link do Israel Aece para consulta de como habilitar o tracing do WCF.

    Espero ter ajudado.

    Abraços,


    Daniel Torres Coding is fun :)

    • Marcado como Resposta Edson Fiorese sexta-feira, 10 de fevereiro de 2012 15:02
    quinta-feira, 9 de fevereiro de 2012 16:19
  • Muito obrigado pela ajuda mas já dei uma boa procurada para este solução e acabei lendo bastante materoal sobre tamanhos e cotas.

    Habilitei o tracing do WCF porém não entendi o log e não consegui visualizar a propriedade correta que tenho q alterar.

    No momento estou usando estas configurações

    <system.web>
        <httpRuntime maxRequestLength="10240000"/>
      </system.web>

    <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IServiceExame" closeTimeout="01:00:00"
              openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00"
              allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
              maxBufferSize="500000000" 
              maxBufferPoolSize="2147483647" 
              maxReceivedMessageSize="500000000"
              messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
              useDefaultWebProxy="true">
              <readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>


    • Editado Edson Fiorese quinta-feira, 9 de fevereiro de 2012 16:34
    quinta-feira, 9 de fevereiro de 2012 16:33
  • Boas Edson,

    De fato o tracing (pelo menos na minha opinião) as vezes é um pouco sombrio. Após abrir o svcTraceViewer, tente verificar no painel do lado esquerdo, as linhas que estiverem com o fundo amarelo ou com as letras em vermelho. Elas indicam as exceptions que ocorreram na comunicação. Clique em cima delas e va para o painel central superior. Nele estão registradas todas as ações e provavelmente tambem terão linhas com o fundo amarelo ou na cor vermelha.  Clique em cima e verifique no painel abaixo a mensagem.

    Tente configurar um tamanho ideal nos binding, pois colocar valores exagerados abre brechas de segurança no seu serviço.

    Espero  ter ajudado.

    Abraços,


    Daniel Torres Coding is fun :)

    quinta-feira, 9 de fevereiro de 2012 17:39
  • Daniel com sua ajuda consegui chegar a essa mensagem porém é a mesma que postei no inicio:  

    "The underlying connection was closed: The connection was closed unexpectedly."

    Tem alguma ideia do que possa ser?

    quinta-feira, 9 de fevereiro de 2012 18:54
  • Boas Edson,

    Antes do "throwing an exception" não tem nenhuma outra mensagem? um warning ou algo do genero? Pelas vezes que eu usei, geralmente a mensagem de erro estava em algumas linhas acima do throw. Caso não tenha, verifique no painel esquerdo os outros error. Nem sempre esta no ultimo erro apresentado. Outro detalhe que talvez ja esteja configurado, mas vale a pena dar uma olhada, é o includeexceptiondetailsinfaults.

    <serviceDebug includeExceptionDetailInFaults="true" />

    Caso o valor esteja como false, acredito que não ele mostre a real causa.

    Espero ter ajudado.

    Abraços


    Daniel Torres Coding is fun :)

    quinta-feira, 9 de fevereiro de 2012 22:56
  • Desculpa a demora para desponder.

    Daniel todos os as mensagens são identicas, e não tem nenhuma mensagem antes tambem.

    Esta ajudando muito Daniel muito obrigado.

    sexta-feira, 10 de fevereiro de 2012 10:14
  • Bom dia Edson,

    Que é isso cara, o conhecimento tem que ser compartilhado :). Ja sofri bastante com WCF tambem :| e o pouco que sei tento compartilhar.

    Uma duvida. Qual configuração voce colocou nesse tracing do wcf? Somente error? Caso sim, tente mudar para All. 

    Outro ponto a se notar, é uma propriedade da section readerQuotas. A maxBytesPerRead. No config que voce mandou ela esta com o valor default. Tente alterar e faça um teste. Seguem um link para referencia.

    Espero  ter ajudado.

    Abraços


    Daniel Torres Coding is fun :)

    sexta-feira, 10 de fevereiro de 2012 10:56
  • Bom dia,

    Edson.

    Em relação ao WCF você tem N possibilidades de configuração do mesmo, para que seja possivel obter o melhor desempenho do serviço, diversas são as opções que vem desativado ou mesmo tamanhos disponiveis menores visando aumento do desempenho caso necessite voce pode aumentar essas configurações para se adequar a seu ambiente.

    Abaixo segue um post onde é possivel aumentar a  maxItemsInObjectGraph configuração que possibilita o wcf serializar mais objetos do que o padrão. Assim sera possivel transferir uma lista maior de objetos.

    http://social.msdn.microsoft.com/Forums/pt-BR/wcfpt/thread/4992673e-4c5d-45b9-b3eb-4e43527aeca8/#e2f82112-6ad6-42f6-9766-653dc45ea500

     

    Att..


    • Marcado como Resposta Edson Fiorese sexta-feira, 10 de fevereiro de 2012 15:00
    sexta-feira, 10 de fevereiro de 2012 12:13
  • Muito obrigado Manoel e Daniel

    Com a ajuda de ambos consegui resolver o proble,

    um grande abraço

    sexta-feira, 10 de fevereiro de 2012 15:01