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?
Répondre
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.
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.
Le premier paragraphe n'est pas pertinent en raison de la topologie du serveur. Le deuxième paragraphe est pertinent. – TheSoftwareJedi
- 1. Rendre un contrôle utilisateur à une chaîne
- 2. Rendre un objet accessible à un seul autre objet dans le même assemblage?
- 3. Comment puis-je rendre une datable accessible globalement dans une application Winforms?
- 4. Envoyer une application à un écran spécifique en utilisant C#
- 5. Rendre une application MFC internationale
- 6. Rendre une application wxPython multilingue
- 7. Comment référencer une ressource de fichier dans une application JSF
- 8. Puis-je utiliser une bibliothèque non threadsafe dans une application Web .NET multi-utilisateur?
- 9. Comment forcer une application .NET à s'exécuter à froid
- 10. Comment autoriser un utilisateur à diffuser de la vidéo dans une application Web pour la stocker?
- 11. Comment masquer une clé de chiffrement dans une application .NET?
- 12. Comment utiliser NHibernate dans une architecture distribuée?
- 13. Faire une collection de Expandeurs WPF 'expand' exclusivement, ie un seul développé à la fois
- 14. Enregistrer un utilisateur Se connecter à une application ASP.NET MVC
- 15. Comment rendre un fichier accessible en écriture dans VB?
- 16. Dans .NET, Quelle est la différence entre une ressource intégrée et une ressource?
- 17. Comment rendre un dossier accessible sur un site WordPress?
- 18. Comment ajouter dynamiquement des contrôles .Net à une application vb6
- 19. Rendre une variable globale accessible pour chaque fonction dans une classe
- 20. iPhone: Quelle est la meilleure façon d'utiliser à la fois OpenGL et l'interface utilisateur native dans une application?
- 21. Comment puis-je demander l'accès à un partage Windows dans une application .NET client lourd?
- 22. Comment rendre tangible une application Swing?
- 23. Comment rendre une application ASP.NET MVC multilingue?
- 24. Comment appeler la bibliothèque iPod dans une application utilisateur
- 25. Recommandations pour l'accès à un seul utilisateur Base de données
- 26. PHP servant une page à la fois
- 27. Comment puis-je créer une ressource Windows à intégrer dans un assembly .NET, à partir du texte?
- 28. Comment rendre une application ASP disponible sur un intranet
- 29. Comment relier dataset/datatable de Tomcat à une application .NET?
- 30. Comment ajouter plus d'une ressource à une fenêtre XAML?
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