2009-08-07 9 views
0

J'ai un problème avec mon application asp.net. Les utilisateurs peuvent accéder à un document, mais un seul utilisateur peut accéder à un document en même temps. Lorsqu'un utilisateur obtient un document, un indicateur dans la base de données est mis à jour pour le document, indiquant que le document est en cours d'utilisation. Lorsque l'utilisateur finit de travailler avec le document, ce drapeau est à nouveau mis à jour pour indiquer que le document n'est plus utilisé. Le problème survient lorsque l'utilisateur a un document ouvert et la session de l'utilisateur expire; l'indicateur db n'est pas mis à jour pour indiquer que le document n'est pas utilisé. Si le document est ouvert par la même personne qui l'a verrouillé (en changeant le drapeau db), le document s'ouvre. Le problème vient si l'utilisateur qui a verrouillé le document est différent que l'utilisateur qui veut ouvrir le document est différent de l'utilisateur le verrouillé. Une approche que j'ai utilisée était d'avoir une liste d'utilisateurs qui sont connectés dans l'application. Si l'utilisateur sur lequel le document est verrouillé n'est pas connecté, nous savons que le document n'est plus utilisé et nous pouvons ouvrir le document. Le problème que j'ai est que lorsqu'un nouvel utilisateur se connecte, j'ajoute l'ID utilisateur à une liste d'utilisateurs qui sont actuellement connectés. Lorsqu'une session se termine, la méthode Session_End dans Global.asax supprime l'utilisateur de la liste, mais l'événement ne se déclenche pas toujours (pas sûr de savoir pourquoi, mais il s'agit apparemment d'un problème connu). Y at-il un moyen de forcer cet événement à exécuter lorsqu'une session expire, ou, si quelqu'un est venu accross un problème similaire, quelqu'un peut me pointer vers une approche différenteASP.Net utilisation des documents

Un grand merci pour votre aide les gars Javier

+0

vous suggère de nettoyer votre question pour le rendre plus compréhensible ... –

+0

Je n'ai pas de solution pour vous, mais je pense que l'utilisation des événements de session pour déverrouiller des documents à l'expiration de la session ne sera pas une méthode robuste. Par exemple. Si le processus de l'application a été tué. En passant, je suppose que le but de cette exigence de l'entreprise est d'empêcher la mise à jour simultanée d'un document? Comment vous assurez-vous que la session n'expirera pas lorsque l'utilisateur travaille toujours sur le document? –

Répondre

0

Peut-être avoir un processus qui libère tous les documents ouverts s'ils ont été verrouillés pendant longtemps

Ou peut-être permettre au deuxième utilisateur de venir et d'acier la serrure si elle a été verrouillée pendant un certain temps. Ceci est similaire à ce que svn