Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Problema com API de inicialização

Boa noite, Tenho uma aplicação "SPA" que estou tentando realizar o warmpup(IIS 8.0 Application Initialization) e estou tendo problema em um ponto conforme segue abaixo, se alguém poder me ajudar agradeço desde já.

Exemplo: Pool sem configurar o aquecimento, quando inicia nada acontece; Pool configurado com aquecimento, quando inicia o pool a aplicação processa e fica com 200MB de memória.

Aplicação consegue acessar imediatamente a tela de login e o problema está aí. Assim que realizo login na aplicação, há demora como não estivesse nada iniciado. Após todo o carregamento a aplicação fica com 500MB na memóra.

Durante o processo de inicialização chamo um api que realiza consultas no banco de dados.

Antes de realizar um monte de consultas no banco, existe algum método que posso utilizar para iniciar todo o assembly ao invés de ficar fazendo várias consultas para isso?

Não tem nenhum coisa no login, é usuário e senha no banco de dados e caso seja igual cria a session e faz o login.

5 respostas

Oi, Letícia. Sua aplicação é Asp.Net Core ou .Net Framework? Pergunto porque os pontos de entrada são diferentes.

Numa aplicação Asp.Net voltada para a plataforma .Net Framework o ponto de entrada é o método Application_Start() que fica no arquivo Global.asax.

Já numa aplicação Asp.Net Core o ponto de entrada fica na classe de inicialização (em geral nomeada Startup). Você pode colocar seu código de inicialização lá.

Você está seguindo as instruções dessa página, certo?

Se puder coloca o trecho do seu código para a gente poder ajudar melhor.

Abraços!

Boa tarde Daniel, a aplicação é .net framework. Estou segunindo o link sim.

<system.webServer>
    <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
      <add initializationPage="/api/autoStart" />
      <add initializationPage="/" />
    </applicationInitialization>

Com os outros dois parametros não funcionou "preloadEnabled="true" applicationPool=".NET v4.5">"

No "api/autostart"

   [HttpGet]
        [AllowAnonymous]
        [Route("autoStart")]
        public string autoStart()
        {
            var testWarmUp = new PreWarmUpCache();
            string[] tst = { "teste"};
            testWarmUp.Preload(tst);

            return "ok";
        }


 public void Preload(string[] parameters)
        {
            try
            {

                System.IO.Directory.CreateDirectory("c:\\tst\\");
                System.IO.File.Create(@"c:\tst\teste.txt");
                System.IO.File.Create("C:\\tst\\" + parameters[0]+"2.txt");                              

        string cstring = ConfigurationManager.ConnectionStrings["banco"].ConnectionString;

                var context = new dbAccess.Context("myDatabase");

                var LQueue = context.table1.FirstOrDefault();                                 

                DataAccess.UnitOfWork unitOfWork = new UnitOfWork(cstring);

                Business.SystemConfig SystemConfigBusiness = new Business.SystemConfig(unitOfWork);
                var err = SystemConfigBusiness.Get(a => a.Id < 10).ToList();

                var culture = "pt-BR";

                Business.User BusinessUser = new Business.User(unitOfWork);
                var user = BusinessUser.GetById(1);


            }
            catch(Exception ex)
            {
                throw ex;
            }

        }

Não alterei nada no global.asx; é uma aplicação para vários banco, estava penando em fazer funcionar para um banco depois fazia um while. Caso tenho procedimento mais adquado estou disposota para testar.

Desde já agradeço!

Oi, Letícia, o que vc quer dizer com "não funcionou"? O código do método Preload() não foi executado, é isso?

Fiz uma pesquisa e encontrei dois links que podem te ajudar (em inglês). Não sei se já passou por eles:

Aguardo suas respostas!

Quando adiciono os parâmetros ele não funciona, tentei os parâmetros isoladamente e também não funciona, isso é, o método Preload() não chama.

Quando remover, a aplicação é inicializada assim que o pool é iniciado e o arquivo "teste2.txt" é criado.

Logo, acredito que o application initialization, está funcionando corretamente. Já que a aplicação está funcioando. O problema está no inicializar toda a aplicação.

"Acho que a demora após o login no primeiro acesso seja devido ao banco de dados".

solução!

Dentro do catch, tenta logar o stack trace da exceção em algum arquivo pra gente diagnosticar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software