2011-01-13 17 views
8

¿Hay alguna forma en ASP.net de obtener datos del servidor sin extender el tiempo de espera de la sesión? Esto debe hacerse cada pocos minutos sin interacción del usuario hasta que la página se cierre.Obtener datos del servidor sin extender el tiempo de espera de la sesión

contexto adicional, conforme a lo solicitado:

de las páginas del webapp tiene que consultar al servidor cada pocos minutos para comprobar si hay una condición particular (mantenimiento de emergencia previsto para el turno de 30 minutos, en este caso). Cuando la condición es verdadera, la página mostrará un mensaje al usuario. Cuando la condición es falsa, no es necesario que suceda nada.

Según tengo entendido, las devoluciones de datos al servidor restablecen el tiempo hasta que la sesión expira. No queremos que la sesión se extienda/renueve/restablezca/cualquiera que sea la palabra cada vez que la página sondea el servidor. Necesito una forma de sondear el servidor automáticamente sin restablecer el tiempo de espera de la sesión.

Gracias.

+0

¿Tal vez necesitamos un poco más de información? Podría extender el tiempo de espera de la sesión. – Remy

+1

AJAX Las llamadas a un servicio web no deberían extender la sesión del usuario. – Refugee

+1

@Refugee: ¿No debería o no?Siéntase libre de publicar su comentario como respuesta, ya que parece que podría ser la respuesta que estoy buscando. –

Respuesta

3

Si está preguntando en el contexto de una larga solicitud de HTTP, de modo que está buscando evitar un tiempo de espera de HTTP, consulte <httpRuntime executionTimeout="99999"></httpRuntime> de web.config donde executionTimeout está en segundos, creo, http://msdn.microsoft.com/en-us/library/e1f13641(v=vs.71).aspx.

Si realmente es solo un problema de tiempo de espera de la sesión, ¿es posible hacer ping asincrónicamente al servidor en la misma sesión de usuario, mientras se está ejecutando el proceso prolongado?

Editar: en base a su edición, si se particiona el "mantenimiento del sitio web" servicio web en un servicio fuera del alcance de estado de sesión de la parte normal del sitio, entonces se le puede llamar tantas veces como te gustaría. Si está utilizando un servicio web ASMX en su sitio web actual en este momento, por ejemplo, simplemente divídalo en una aplicación separada, tal vez como un directorio fuera de su aplicación, de modo que caiga bajo el mismo dominio. Me imagino que funcionaría bien.

No estoy seguro de qué tipo de servicio web está invocando en este momento (ASMX, WCF, etc.), o incluso si el servicio web que está invocando en este momento está en la misma aplicación que Páginas de aplicaciones ASPX.

+0

Su edición contenía la solución que necesitaba. –

1

En primer lugar, si una consulta se ejecuta más allá del límite de tiempo de la sesión, entonces hay un problema grave con la consulta. Prefiero arreglar la consulta primero. Sin embargo si todavía quiere hacerlo utilizando la sesión, intente esto:

Puede tener un Dummy.aspx en su aplicación y luego tener un elemento de imagen actualizar su dirección URL cada 15 minutos como:

<img id="dummyImage" src="/Dummy.aspx" width=0 height=0/> 

<script type="text/javascript"> 
    var dummyImage = document.getElementById("dummyImage"); 
    setInterval(function(){ 
     dummyImage.src = "Dummy.aspx?_tmp=" + (Math.random() * 100000); 
    }, 900000); 
</script> 

De esta manera no afectará el tiempo de espera de la sesión a nivel global.

+2

Al hacer dummyImage.src = "Dummy.aspx? .....", el navegador emitirá una solicitud GET a esa url, que también incluye la cookie sessionId y, por lo tanto, restablece el tiempo de espera de la sesión. –

-2

Use un temporizador javascript que active una llamada AJAX. Por lo tanto, en su evento PageLoad echo fuera una función javascript setInterval(functiontocall(), timetowait);. El método que llame será el acceso AJAX a un servicio web que hace su consulta.

Esto seguirá llamándose hasta que el usuario cierre la página.

Las sesiones no se actualizan desde los hits de AJAX.

+3

AJAX hits en la misma aplicación web, no actualizar la sesión, por desgracia. Gracias por la ayuda, sin embargo. –

+1

Las solicitudes AJAX son como solicitudes regulares, excepto que son asincrónicas. Eso significa que también incluirán la cookie de identificación de la sesión, vinculando la solicitud a la sesión y, por lo tanto, restablecer el tiempo de espera. –

Cuestiones relacionadas