Comment rendre une ressource (écran) accessible à un seul utilisateur à la fois dans une application .Net distribuée?

StackOverflow https://stackoverflow.com/questions/354113

Question

J'ai une application Windows Form basée sur un serveur client qui nécessite un écran destiné uniquement à l'administrateur. La fonctionnalité administrateur doit être implémentée de manière à ce qu'un seul administrateur puisse accéder à cet écran à tout moment. L'application client Windows Forms parle au serveur à l'aide de .NET Remoting. Et le côté serveur est distribué sur plusieurs machines.

Était-ce utile?

La solution

Cela peut être fait plus facilement en utilisant une table de base de données. 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 verrouillage partagé. Ayez juste une table de verrouillage contenant 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. C’est cependant un point d’échec, sauf si vous investissez dans l’une des technologies les plus récentes d’état distribué.

Cependant, vous vous préparez vraiment à d’autres problèmes. Vous aurez besoin d'un écran pour forcer le déverrouillage, voir qui a le verrou, etc. Vous feriez mieux de comprendre pourquoi ce verrou est vraiment nécessaire. Est-ce une exigence technologique ou commerciale? Vous pouvez plus facilement et proprement implémenter un scénario pessimiste de mise à jour des données qui améliorerait l'expérience utilisateur.

Autres conseils

Vous devez conserver un membre statique sur le serveur indiquant 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. S'agit-il d'une sorte de topologie à charge équilibrée fonctionnant comme un serveur virtuel? Si tel est le cas, vous devrez peut-être conserver la valeur dans une base de données. Pensez-y de la même manière que persiste ASP.Net État de session . Je peux exister sur le serveur, mais s’il existe une batterie de serveurs, celle-ci peut être déplacée vers SQL Server pour être utilisée par tous les serveurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top