none
Aplicação no IIS para de comunicar com o banco. RRS feed

  • Pergunta

  • Boa tarde, 
    Estou tendo um problema com aplicação em aspx que publiquei no IIS 7. Trata-se de um controle de estoque.
    Acontece que a aplicação funciona por um tempo, porém, depois ela para de comunicar com o Banco. Aparece a seguinte tela:

    Erro de Servidor no Aplicativo '/'.

    Erro no tempo de execução

    Descrição: Erro de um aplicativo no servidor. As atuais configurações de erro personalizadas para esse aplicativo impedem a exibição remota dos detalhes do erro do aplicativo (por motivos de segurança). No entanto, eles poderiam ser exibidos por navegadores em execução no servidor local. 

    Detalhes: Para ativar os detalhes desta mensagem de erro específica para exibição em computadores remotos, crie uma marca <customErrors> dentro de um arquivo de configuração "web.config" localizado no diretório raiz do aplicativo de web atual. Essa marca <customErrors> deve ter o atributo "mode" definido como "Off".
    <!-- Arquivo de Configuração Web.Config -->
    
    <configuration>
        <system.web>
            <customErrors mode="Off"/>
        </system.web>
    </configuration>

    Observações: A página de erro atual que você está vendo pode ser substituída por uma página de erro personalizada modificando o atributo "defaultRedirect" da marca de configuração <customErrors> do aplicativo para apontar para um URL de página de erro personalizada.
    <!-- Arquivo de Configuração Web.Config -->
    
    <configuration>
        <system.web>
            <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
        </system.web>
    </configuration>

    Mesmo fechando a aplicação e abrindo de novo, surge a tela de login normalmente, porém quando faz a requisição para o banco aparece a mesma tela.
    O banco que estou usando é o postgresql. 

    Agradeço desde já!

    quarta-feira, 19 de março de 2014 20:20

Respostas

  • Fala Yago, blz?

    Já que você já esta revisando, aproveita e faz uma alteração, deixa assim:

    catch (Exception ex)
                {
                    throw ex;
                }
    Finaly
    {
     cmd.Dispose();
     conn.Close();
    }           
     return resp;

    Inclua o bloco Finaly, do jeito que está sua estrutura se ocorrer alguma exception ele não vai fechar a conexão e isso com certeza geraria problema. O Finaly serve pra isso, sempre que ele entrar no bloco try ele vai entrar no Finaly também. Outra coisa, verifique os métodos conn.Close() já vi casos de estar conn.Clone() por erro de digitação.

    Wennder Santos


    • Editado Wennder SantosMVP sexta-feira, 21 de março de 2014 19:01
    • Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:38
    sexta-feira, 21 de março de 2014 19:01

Todas as Respostas

  • Olá,

    Pra você saber qual exception está ocorrendo adicione assim no web.config, como pede acima.

        <system.web>
            <customErrors mode="Off"/>
        </system.web>
    


    quinta-feira, 20 de março de 2014 00:03
    Moderador
  • Olá Yago, blz?

    tente fazer o que o welington sugeriu e visualize o erro, mas, se mesmo assim não conseguir resolver de uma revisada na sua query, pode ser que esteja fazendo algo errado e o time do seu Command está estourando.



    Wennder Santos

    quinta-feira, 20 de março de 2014 01:36
  • Olá, fiz o que me pediram, e esse foi o erro:

    Erro de Servidor no Aplicativo '/'.

    Tempo limite ao obter uma conexão de piscina.

    Descrição: Ocorreu UMA Exceção SEM Tratamento Durante uma Execuções da Atual solicitação da Web. Examine o Rastreamento de Pilha de para obter mais informacoes sobre o Erro e Onde FOI originado nenhum Código. Detalhes da Exceção: System.Exception: Timeout ao obter uma conexão de piscina. Erro de Origem:

    Exceção SEM treatment was Gerada Durante um Execuções da Atual solicitação da Web. Como Informations relacionadas à Origem e AO locais da Exceção PODEM serviços identificadas usando-se o Rastreamento de Pilha de Exceção abaixo.

    Rastreamento de Pilha: 
    [Exceção:. Timeout ao obter uma conexão de piscina]
       Npgsql.NpgsqlConnectorPool.RequestPooledConnector (Conexão NpgsqlConnection) em c: \ C # Apps \ github.npgsql.Npgsql.stock \ src \ Npgsql \ NpgsqlConnectorPool.cs: 222
     Npgsql.NpgsqlConnectorPool.RequestConnector (Conexão NpgsqlConnection) em c: \ C # Apps \ github.npgsql.Npgsql.stock \ src \ Npgsql \ NpgsqlConnectorPool.cs: 179
       Npgsql.NpgsqlConnection.Open () em c: \ C # Apps \ github.npgsql.Npgsql.stock \ src \ Npgsql \ NpgsqlConnection.cs: 536
       CARTUCU.UserDAO.contaProdutosB () em C: \ Users \ Usuario \ Desktop \ SICEG \ \ CARTUCU UserDAO.cs: 165
       CARTUCU.UserDAO.verificaProd_B () em C: \ Users \ Usuario \ Desktop \ SICEG \ \ CARTUCU UserDAO.cs: 421
     CARTUCU.frmEstoque2.Page_Load (Object sender, EventArgs e) em C: \ Users \ Usuario \ Desktop \ SICEG \ \ CARTUCU frmEstoqueB.aspx.cs: 62
       System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, o Object, Object t, EventArgs e) +14
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Object sender, EventArgs e) +35
       System.Web.UI.Control.OnLoad (EventArgs e) +91
       System.Web.UI.Control.LoadRecursive () 74
       System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 2207
    


    Informations sobre a Versão:  Microsoft NET Framework Versão:. 4.0.30319; Versão fazer ASP.NET: 4.0.30319.1008

    quinta-feira, 20 de março de 2014 14:52
  • Olá,

    Verifique se sua string de conexão está apontando para o servidor correto, verifique também se o servidor está ligado.. rede.. O que está acontecendo é que não está havendo conexão dentro do tempo default.

    De também uma olhada nesse post:

    http://social.msdn.microsoft.com/Forums/pt-BR/be8e52ff-a6ec-4e0a-93c7-5767e9be59ba/timeout-de-conexao

    Wennder Santos

    quinta-feira, 20 de março de 2014 15:41
  • blz Wennder!
    O estranho é que o problema só ocorre depois de um tempo. Me corrija se eu estiver errado, mas se fosse problema em alguma query deveria ocorrer imediatamente certo?

    A principio eu posso executar todas funcionalidades do programa que não ocorre erro, porém depois um tempo ele apresenta esse erro somente para forms que usam o banco. Dai a solução é tirar a aplicação do IIS e colocar de novo.

    quinta-feira, 20 de março de 2014 15:44
  • Olá,

    então a aplicação funciona e para com o tempo? Você consegue utilizar os forms que acessam banco na primeira vez que você abre a aplicação?

    Wennder Santos

    quinta-feira, 20 de março de 2014 18:11
  • Exatamente, funciona por um tempo, acredito que esse tempo esteja relacionado a quantas vezes eu faço solicitação para o banco, depois ele começa a exibir esse erro. 

    No momento eu estou revisando todas os métodos que usam query. Aqui vai um exemplo:

     public string validaUser(string login, string senha)
            {
                string resp = "";
    
                NpgsqlConnection conn = new NpgsqlConnection("Server=" + server + ";Port=" + porta + ";User Id=" + id + ";Password=" + password + ";Database=" + database + ";");
                conn.Open();
                NpgsqlCommand cmd = new NpgsqlCommand("SELECT nivel FROM \"USUARIOS\" WHERE login = '" + login + "' AND senha = '" + senha + "';", conn);
                try
                {
                    NpgsqlDataReader rd = cmd.ExecuteReader();
                    if (rd.HasRows)
                    {
                        rd.Read();
                        resp = rd["nivel"].ToString();
                    }
                    else
                    {
                        resp = "Erro";
                    }
                    rd.Close();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                cmd.Dispose();
                conn.Close();
                return resp;
            }

    A maioria dos métodos segue este padrão, e eu sempre uso o Dispose e o Close, pra fechar tudo que foi aberto.

    sexta-feira, 21 de março de 2014 16:58
  • Fala Yago, blz?

    Já que você já esta revisando, aproveita e faz uma alteração, deixa assim:

    catch (Exception ex)
                {
                    throw ex;
                }
    Finaly
    {
     cmd.Dispose();
     conn.Close();
    }           
     return resp;

    Inclua o bloco Finaly, do jeito que está sua estrutura se ocorrer alguma exception ele não vai fechar a conexão e isso com certeza geraria problema. O Finaly serve pra isso, sempre que ele entrar no bloco try ele vai entrar no Finaly também. Outra coisa, verifique os métodos conn.Close() já vi casos de estar conn.Clone() por erro de digitação.

    Wennder Santos


    • Editado Wennder SantosMVP sexta-feira, 21 de março de 2014 19:01
    • Marcado como Resposta Giovani Cr quarta-feira, 26 de março de 2014 18:38
    sexta-feira, 21 de março de 2014 19:01
  • Olá Yago,

    novidade?

    Wennder Santos

    segunda-feira, 24 de março de 2014 21:38
  • Olá Wender,
    Com suas orientações eu consegui descobrir que de fato o problema ocorre devido as conexões abertas, no entanto eu ja revisei todos os códigos e não vi nenhuma conexão que fique aberta, inclusive eu fiz aquilo que você orientou, coloquei o  finaly em todos metodos que fazer solicitação para o banco.

    Para resolver eu preciso saber como limpar o pool de conexões do postgres, pelo que pesquisei existe um comando de query que limpa o pool de conexões, porém ainda não descobri se o mesmo existe para postgres e também não sei se de fato isso resolverá o problema.

    quinta-feira, 27 de março de 2014 16:41