none
Aplicacion web se corta tras inactividad 5 minutos. RRS feed

  • Pregunta

  • Hola:

    Estoy empezando a utilizar mi aplicación web para mi trabajo que ha sido una migración se una aplicación local a asp.net pero tengo un gran problema porque a los 5 minutos de inactividad se corta la conexión y aparece la página de inicio con las contraseñas.

    En el web config tengo puesto:

     <authentication mode="Forms">
                <forms loginUrl="miPageLogin.aspx" timeout="300" slidingExpiration="true"/>
            </authentication>
    
    ...
    
            <sessionState mode="InProc" timeout="300" />


    Pero nada de todo eso da resultado.

    No sé si es un problema del hosting donde tengo albergada la aplicación web.

    Agradeceré a quien me pueda orientar sobre esto, pues no contaba con ello cuando subí la aplicación. He buscado en el foro pero no encuentro nada que me dé resultado hasta ahora. pero me urge un poco porque la aplicación no se puede utilizar con tiempos tan cortos que hay que poner cada 5 minutos las contraseñas y algunos trabajos se pierden.

    Saludos al grupo.


    jueves, 4 de mayo de 2017 18:59

Respuestas

  • Al tratarse mi hospedaje de un hosting de pago, creo que el motivo es que en el server el máximo de inactividad permitida es de 5 minutos, sin que sirvan de nada los valores del web.config o al menos es la conclusión que he sacado.

    Creo que he dado con una solución a medias que es llamando periódicamente a una página imaginaria por así decirlo con un setInterval. Lo he sacado de

    http://www.jasoft.org/Blog/post/PermaLinkaspxguid=73c6ade2-5d80-41f6-ac88-07ae70b.aspx

    Lo estoy probando y va funcionando bien salvo que se termine el timeout del web.config y se lanza un error de javascript, pero eso es mucho mejor que un cierre de sesión cada 5 minutos.

    Por si a alguien le sirve aquí está el código en vb de la fución javascript que se puede escribir en un módulo .js y de la llamada que se pone por ejemplo al final de una página maestra al 90% de 5 minutos:
    -----------------------------------------------------

     //Ejecuta el script en segundo plano evitando así que caduque la sesión de esta página
        function mantenerSesion() {
            var CONTROLADOR = "refresh_session.ashx";
            var head = document.getElementsByTagName('head').item(0);
            script = document.createElement('script');
            script.src = CONTROLADOR;
            script.setAttribute('type', 'text/javascript');
            script.defer = true;
            head.appendChild(script);
        } 

    <script type="text/javascript">
        setInterval('mantenerSesion()', <%Response.Write(CInt(0.9 * (5 * 60000))) %>); 
    </script>
    -----------------------------------------------------

    Agradeceré algún comentario de alguien con alguna experiencia en este tema o que aporte alguna alternativa mejor.

    Saludos al grupo.


    domingo, 21 de mayo de 2017 15:19
  • Lo que están haciendo en los pc con XP es entrar directamente con otro navegador que no es IE y al menos no tienen problemas de script.

    Pero el tiempo de inactividad pienso que no debería de ocurrir. 

    Mi web.config tiene una serie de lineas de codigo XML que no sé si son útiles pero no me atrevo a quitar. La aplicación es para el net framework 4.5.2.

    Copio el webconfig, hay muchas lineas que no sé de donde han salido y si sirven para algo:

    -------------------------------------------------------------

                    
    <?xml version="1.0"?>
    <!--
    Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite
    http://go.microsoft.com/fwlink/?LinkId=169433
    -->
    <configuration>
        <connectionStrings>
            <add name="ConnectionStringA" 
                 connectionString="Provider=... 
                 providerName="System.Data.OleDb"/>
            <add name="ConnectionStringB" 
                 connectionString="Provider=...
                 providerName="System.Data.OleDb"/>
            <add name="ConnectionStringC" 
                 connectionString="Provider=...
                 providerName="System.Data.OleDb"/>
        </connectionStrings>
    <!--
    Para obtener una descripción de los cambios de web.config, vea http://go.microsoft.com/fwlink/?LinkId=235367.
    Los siguientes atributos se pueden establecer en la etiqueta <httpRuntime>.
    <system.Web>
    <httpRuntime targetFramework="4.5.2" />
    </system.Web>
    -->
        <system.web>
            <compilation strict="true" explicit="true" debug="true" targetFramework="4.5.2"/>
            <customErrors mode="Off"/>
    
          <httpRuntime requestValidationMode="2.0"/>
    
            <authentication mode="Forms">
                <forms loginUrl="pageLogin.aspx" timeout="300" slidingExpiration="true"/>
            </authentication>
    
            <authorization>
                <deny users="?" /> <!-- solo los usuarios autentificados -->
            </authorization>
    
            <membership>
                <providers>
                    <clear/>
                    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
                         connectionStringName="ApplicationServices" enablePasswordRetrieval="false" 
                          enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" 
                          maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" 
                          passwordAttemptWindow="10" applicationName="/"/>
                </providers>
            </membership>
            <profile>
                <providers>
                    <clear/>
                    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" 
                         connectionStringName="ApplicationServices" applicationName="/"/>
                </providers>
            </profile>
            <roleManager enabled="false">
            <providers>
                <clear/>
                <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" 
                     connectionStringName="ApplicationServices" applicationName="/"/>
                <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
            </providers>
            </roleManager>
            <xhtmlConformance mode="Strict"/>
            <sessionState mode="InProc" timeout="300" />
            <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
        </system.web>  
    </configuration>


    -------------------------------------------


    jueves, 4 de mayo de 2017 20:19

Todas las respuestas

  • hola

    >>problema porque a los 5 minutos de inactividad se corta la conexión y aparece la página de inicio con las contraseñas.

    o sea despues de 5min te redirecciona al login del sitio ?

    esto sucede cuando ejecutas desde el VS o cuando haces el deploy en el servidor usando el IIS ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de mayo de 2017 19:02
  • Me refiero a la ejecución en los PC clientes por vía Internet desde el hosting de alquiler en un data center de España.

    Estoy a la espera de que me respondan del servicio técnico del data center por si es que el hosting tiene conexión limitada, pero creo que en teoría la conexión es ilimitada, aunque no estoy seguro del todo.

    El panel de control es un plesk.

    jueves, 4 de mayo de 2017 19:37
  • La visualización la hago a través de una pequeña aplicación que instalo en cada máquina local con un control webBrowser de VB.net, pero esta aplicación me está dando también muchos problemas por ejemplo en algunas máquinas que quedan con XP.

    Parece ser que el webBrowser hace referencia al Internet Explorer instalado y da problemas de javascript, por lo que no se puede utilizar la aplicación local y hay que entrar directamente con otro navegador actualizado que no da problemas.

    jueves, 4 de mayo de 2017 19:44
  • He comprobado que al correr la aplicación en localhost con el IIS también se corta y tras unos minutos de inactividad da un error de que no encuentra la base de datos, con lo que no se respetan los tiempos establecidos en el web.config.

    Posiblemente el web.config no está bien configurado o no sirve, o hay que programarlo en otro sitio como la página maestra.

    Si no se soluciona este problema va a ser muy difícil utilizar la aplicación y habrá que volver a las aplicaciones antiguas instaladas en cada máquina.


    jueves, 4 de mayo de 2017 19:53
  • >>Parece ser que el webBrowser hace referencia al Internet Explorer instalado y da problemas de javascript

    asi es el webbrowser se integra al IE que tiene instalada la pc, valida que en Win Xp tengas al menos la version 7 o superior, no recuerdo si WinXp soporta el IE8

    quizas el problema no sea el sitio en el hosting sino el cliente, si accedes directo desde el browser de tu pc de desarrollo observas el mismo efecto ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 4 de mayo de 2017 19:56
  • Lo que están haciendo en los pc con XP es entrar directamente con otro navegador que no es IE y al menos no tienen problemas de script.

    Pero el tiempo de inactividad pienso que no debería de ocurrir. 

    Mi web.config tiene una serie de lineas de codigo XML que no sé si son útiles pero no me atrevo a quitar. La aplicación es para el net framework 4.5.2.

    Copio el webconfig, hay muchas lineas que no sé de donde han salido y si sirven para algo:

    -------------------------------------------------------------

                    
    <?xml version="1.0"?>
    <!--
    Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite
    http://go.microsoft.com/fwlink/?LinkId=169433
    -->
    <configuration>
        <connectionStrings>
            <add name="ConnectionStringA" 
                 connectionString="Provider=... 
                 providerName="System.Data.OleDb"/>
            <add name="ConnectionStringB" 
                 connectionString="Provider=...
                 providerName="System.Data.OleDb"/>
            <add name="ConnectionStringC" 
                 connectionString="Provider=...
                 providerName="System.Data.OleDb"/>
        </connectionStrings>
    <!--
    Para obtener una descripción de los cambios de web.config, vea http://go.microsoft.com/fwlink/?LinkId=235367.
    Los siguientes atributos se pueden establecer en la etiqueta <httpRuntime>.
    <system.Web>
    <httpRuntime targetFramework="4.5.2" />
    </system.Web>
    -->
        <system.web>
            <compilation strict="true" explicit="true" debug="true" targetFramework="4.5.2"/>
            <customErrors mode="Off"/>
    
          <httpRuntime requestValidationMode="2.0"/>
    
            <authentication mode="Forms">
                <forms loginUrl="pageLogin.aspx" timeout="300" slidingExpiration="true"/>
            </authentication>
    
            <authorization>
                <deny users="?" /> <!-- solo los usuarios autentificados -->
            </authorization>
    
            <membership>
                <providers>
                    <clear/>
                    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
                         connectionStringName="ApplicationServices" enablePasswordRetrieval="false" 
                          enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" 
                          maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" 
                          passwordAttemptWindow="10" applicationName="/"/>
                </providers>
            </membership>
            <profile>
                <providers>
                    <clear/>
                    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" 
                         connectionStringName="ApplicationServices" applicationName="/"/>
                </providers>
            </profile>
            <roleManager enabled="false">
            <providers>
                <clear/>
                <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" 
                     connectionStringName="ApplicationServices" applicationName="/"/>
                <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
            </providers>
            </roleManager>
            <xhtmlConformance mode="Strict"/>
            <sessionState mode="InProc" timeout="300" />
            <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
        </system.web>  
    </configuration>


    -------------------------------------------


    jueves, 4 de mayo de 2017 20:19
  • Hola, has revisado en tu código si tienes digamos por ejemplo, una llamada a Session.Abandon? Tal vez el problema (ya que se repite tanto en el hosting como en tu local) esté en el código fuente.

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 5 de mayo de 2017 6:59
    Moderador
  • Hola, también revisa la configuración de tu AppPool en IIS ya que se puede configurar el reciclaje automático del pool y eso puede provocar que se "cierren" las sesiones. 

    Puedes mostrarnos la configuración avanzada de tu AppPool?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 5 de mayo de 2017 7:06
    Moderador
  • También el reciclaje del pool puede provocarse porque el proceso de iis llega a un límite de memoria establecido. Puedes verificar esto en tu local? Qué cantidad de memoria consume el proceso? Verifica que no uses grandes volúmenes de datos en tu objeto Session dentro de tu código, ya que como veo que tienes la sesión configurada como InProc, los datos de sesion se almacenan en la memoria del servidor.

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 5 de mayo de 2017 7:08
    Moderador
  •  Hola Sergio, muchas gracias:

    Hola Sergio, muchas gracias:

    La verdad es que ando un poco perdido, ya digo que es la primera vez que monto una aplicación web en un hosting y no sabía que se fueran a presentar tantos problemas, pensaba que bastaba instalar la aplicación y los datos en una máquina remota. La aplicación en sí funciona perfectamente, igual de rápido que lo hacía en local y sin ningún problema salvo que se corta cada 5 minutos.

    Los datos que manejo son mínimos, ni siquiera estoy subiendo ninguna imagen, se trata de subir y bajar lineas de texto muy pequeñas a una BD.

    Cuando hablas del IIS me imagino que te refieres al IIS del server pero es que yo creo que no puedo cambiar los valores.

    No sé si influye el IIS local donde pruebo la aplicación, pues creo que en local también se corta la aplicación pero no tan pronto. Voy a mirar si puedo entrar en el IIS manager de mi máquina. 

    No tengo ninguna referencia a session abandon en toda la solución en mi código fuente.

    viernes, 5 de mayo de 2017 15:03
  • Al tratarse mi hospedaje de un hosting de pago, creo que el motivo es que en el server el máximo de inactividad permitida es de 5 minutos, sin que sirvan de nada los valores del web.config o al menos es la conclusión que he sacado.

    Creo que he dado con una solución a medias que es llamando periódicamente a una página imaginaria por así decirlo con un setInterval. Lo he sacado de

    http://www.jasoft.org/Blog/post/PermaLinkaspxguid=73c6ade2-5d80-41f6-ac88-07ae70b.aspx

    Lo estoy probando y va funcionando bien salvo que se termine el timeout del web.config y se lanza un error de javascript, pero eso es mucho mejor que un cierre de sesión cada 5 minutos.

    Por si a alguien le sirve aquí está el código en vb de la fución javascript que se puede escribir en un módulo .js y de la llamada que se pone por ejemplo al final de una página maestra al 90% de 5 minutos:
    -----------------------------------------------------

     //Ejecuta el script en segundo plano evitando así que caduque la sesión de esta página
        function mantenerSesion() {
            var CONTROLADOR = "refresh_session.ashx";
            var head = document.getElementsByTagName('head').item(0);
            script = document.createElement('script');
            script.src = CONTROLADOR;
            script.setAttribute('type', 'text/javascript');
            script.defer = true;
            head.appendChild(script);
        } 

    <script type="text/javascript">
        setInterval('mantenerSesion()', <%Response.Write(CInt(0.9 * (5 * 60000))) %>); 
    </script>
    -----------------------------------------------------

    Agradeceré algún comentario de alguien con alguna experiencia en este tema o que aporte alguna alternativa mejor.

    Saludos al grupo.


    domingo, 21 de mayo de 2017 15:19
  • yo lo hago en mi máquina local y me respeta las horas, días etc., sin cerrar la sesión. 

    Pero en el servidor cuando ya me conecto por medio de Internet, no respeta los tiempos. Sigue como si jamás le hubiese asignado nada. 


    Ing. Lariza Anaya

    lunes, 19 de agosto de 2019 22:47