Si, funciona bastante bien. El único riesgo está en el "bloqueante" y no en el "bloqueado". Es decir, es posible que por algún problema de red el que bloqueó pierda la secuencia de pings por más de 10 segundos y quede a destiempo del bloqueo. En este caso, si el ping se reactiva, el usuario vuelve a revivir en el Singleton.
Si nadie en ese período solicitó el objeto bloqueado, lo mantiene (si corresponde). Si alguien lo solicitó, entonces habrá logrado "robárselo" y el "bloqueante" recibirá algún mensaje amigable diciéndole que ha perdido la exclusividad sobre el recurso y otro usuario lo tomó. Ese es el único riesgo. Lo más peligroso sería al revés, que el "bloqueado" acceda al recurso mientras el "bloqueante" lo mantiene. Con este esquema eso nunca pasó. Saludos Leonardo -----Mensaje original----- De: MYMTEC S.A. - Javier Wamba [mailto:[EMAIL PROTECTED] Enviado el: Viernes, 24 de Agosto de 2007 10:16 a.m. Para: puntonet@mug.org.ar Asunto: [puntonet] ASP.NET cierre de explorador * Replies will be sent through Spamex to puntonet@mug.org.ar * For additional info click -> http://www.spamex.com/i/?v=13137989 Muchas gracias leonardo, eso es exactamente lo que nesecito. Ahora, te hago una pregunta, ¿Es seguro implementar un ping o tuviste algun tipo de problema? Justamente mi caso es que voy a utilizar un mutex y nesecito esta seguro de que se desbloquee, no lo puedo inutilizar por 20 minutos y tampoco por 5 segundos sino el tiempo que el usuario necesita, si este se desconecta debo desbloquear. Saludos Javier Wamba ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <puntonet@mug.org.ar> Sent: Friday, August 24, 2007 2:35 AM Subject: [puntonet] ASP.NET cierre de explorador Lo que busca Javier es algo más inmediato, supongo. Esto me pasó en una solución. La Session tiene otro fin. Por un lado no podés hacer que la session expire a los 5 segundos, y por otro, probablemente no pueda esperarse unos... 20 minutos, por ejemplo, a que expire una session normal. Imaginate que tu negocio requiere que un usuario que va a modificar una entidad la bloquee en el servidor. Si esto lo manejás por session, si al usuario se le cuelga el Explorer, esa entidad queda inutilizada por 20 minutos. La solución que adopté es la que dice Omar. Implementé un Ping que iba al Server (por AJAX) cada X segundos y mantenía "vivo" al usuario en un singleton con el listado de usuarios activos. Estos usuarios podían bloquear entidades. Si otro usuario quería acceder a esa entidad y se encontraba bloqueada, se verificaba si el usuario que lo bloqueó seguía vivo, es decir, si su último ping había sido antes del tiempo del PING x 2 (esto por si uno de los pings fallaba y el usuario seguía conectado, se usaba el tiempo x 2) De paso, ya que estaba, usaba ese ping para retornar alguna notificación de cambio al usuario, pero esa es otra historia. Con esto tendrás otra problemática. Ya no vas a tener más expiraciones de session, porque los usuarios, aunque se vayan del escritorio, van a dejar una aplicación viva. Si tu solución utiliza mucho la session y confía que expirará, probablemente tengas un problema de recursos a la larga. En ese caso tendrías que recurrir a un mix session/cache (como hice yo) donde los objetos que guardes en sesión no solo dependan de la session del usuario, sino que además mantengan un tiempo de vida sin uso individual. Saludos Leonardo -----Mensaje original----- De: Pata del Santo [mailto:[EMAIL PROTECTED] Enviado el: Miércoles, 22 de Agosto de 2007 05:07 p.m. Para: puntonet@mug.org.ar Asunto: [puntonet] ASP.NET cierre de explorador * Replies will be sent through Spamex to puntonet@mug.org.ar * For additional info click -> http://www.spamex.com/i/?v=3D13137989 En vez de un timer, no sería mejor utilizar Session.End ? -----Mensaje original----- De: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de Omar del valle Rodríguez Enviado el: miércoles, 22 de agosto de 2007 21:35 Para: puntonet@mug.org.ar Asunto: [puntonet] ASP.NET cierre de explorador Hola.. Por más vueltas que le des.. es imposible controlar el comportamiento del cliente.. o al menos enterandote en el servidor.. Mi consejo.. puedes tener un timer que te envia un request cada X segundos al servidor.. declaras un posible tiempo de espera en el servidor.. y si durante ese tiempo no te llega dicho request.. el cliente voló tu aplicación. Salu2 Omar. ----- Original Message ----- From: "MYMTEC S.A. - Javier Wamba" <[EMAIL PROTECTED]> To: <puntonet@mug.org.ar> Sent: Wednesday, August 22, 2007 2:27 PM Subject: [puntonet] ASP.NET cierre de explorador > gracias pedro, > estoy buscando algo mas efectivo, porque como dijiste, si mato el proceso > no se dispara. > Saludos > > Javier Wamba > > ----- Original Message ----- > From: "Pedro Wood" <[EMAIL PROTECTED]> > To: <puntonet@mug.org.ar> > Sent: Wednesday, August 22, 2007 2:57 PM > Subject: [puntonet] ASP.NET cierre de explorador > > >> Hola, >> no se si es lo que estás buscando... pero con javascript podés usar el >> evento onbeforeunload para disparar una llamada al servidor con AJAX. >> El evento se dispara cuando se cierra el navegador, pero no creo que se >> dispare si matás el proceso. >> Saludos, >> >> Pedro >> >> MYMTEC S.A. - Javier Wamba escribió: >>> Buenas, una preguntita, ¿hay forma de enterarse en el servicor que un >>> usuario cerro el explorador con la X o que lo cerro desde el >>> administrador de procesos? >>> Saludos >>> Javier Wamba >> > > __________________________________________________ Correo Yahoo! Espacio para todos tus mensajes, antivirus y antispam ¡gratis! Regístrate ya - http://correo.yahoo.com.mx/