2008-12-09 7 views
1

J'ai une application de formulaires Windows basée sur un serveur client qui nécessite un écran administrateur seulement. La fonctionnalité d'administrateur doit être implémentée de telle sorte qu'à un moment donné, un seul administrateur puisse accéder à cet écran. L'application cliente Windows Forms parle au serveur à l'aide de .NET Remoting. Et le côté serveur est distribué sur plusieurs machines.Comment rendre une ressource (écran) accessible à un seul utilisateur à la fois dans une application distribuée .Net?

+0

Si vous avez SqlServer dans votre pile, vous pouvez tirer parti de sa fonctionnalité de verrouillage distribué intégré via [ce paquet NuGet] (https://github.com/madelson/DistributedLock). – ChaseMedallion

Répondre

3

Cela peut être fait plus facilement en utilisant une table DB. Généralement, la base de données est déjà tolérante aux pannes et constitue une ressource sûre à utiliser pour un scénario de verrou partagé. Il suffit d'avoir une table de verrouillage qui contient des informations sur la ressource verrouillée, qui l'a, quand, etc.

Vous pouvez également utiliser l'un des différents "serveurs d'état" sur le marché pour stocker l'état de verrouillage. Cela introduit cependant un point de défaillance, à moins que vous n'investissiez dans l'une des technologies d'état distribué les plus récentes.

Cependant, vous vous préparez vraiment à d'autres problèmes. Vous aurez besoin d'un écran pour forcer le déverrouillage, voir qui a la serrure, etc. Il vaut mieux regarder pourquoi ce verrou est vraiment nécessaire. Est-ce une technologie ou une exigence commerciale? Vous pouvez mettre en œuvre plus facilement et plus proprement un scénario de mise à jour des données pessimistes qui améliorerait l'expérience utilisateur.

0

Vous devez gérer un membre statique sur le serveur pour indiquer si la fenêtre est actuellement utilisée. Assurez-vous qu'il est thread-safe en utilisant la fonction lock() lors de la définition de la valeur. Vous pouvez ensuite vérifier cette valeur avant d'afficher l'écran d'administration.

En ce qui concerne le côté serveur, vous mentionnez qu'il existe sur plusieurs PC. Est-ce un type de topologie à charge équilibrée qui fonctionne comme un serveur virtuel? Si c'est le cas, vous devrez peut-être conserver la valeur dans une base de données. Pensez-y de la même manière qu'ASP.Net persiste État de session. Je peux exister sur le serveur, mais s'il existe une batterie de serveurs, elle peut être déplacée vers SQL Server pour être utilisée par tous les serveurs.

+0

Le premier paragraphe n'est pas pertinent en raison de la topologie du serveur. Le deuxième paragraphe est pertinent. – TheSoftwareJedi

Questions connexes