La semaine dernière, j'ai commencé à travailler sur du code existant pour un client de service Web qui a été implémenté sur un Singleton. Je n'ai jamais envisagé de le faire moi-même, alors j'ai commencé à chercher des opinions auprès de personnes ayant une meilleure compréhension du traitement des demandes, etc. Je n'ai pas trouvé de réponse unanime à ce sujet. Quelqu'un avec des idées: la solution Singleton comporte-t-elle le danger que les appels soient bloqués? Est-il préférable d'utiliser la mémoire?Client de service Web en tant que singleton?
Répondre
En règle générale, "un singleton" est pratique, rien d'autre. C'est une mauvaise pratique. Je n'ai pas encore trouvé une situation où un Singleton était la seule solution, il est juste arrivé à être accessible.
Dans quel cadre travaillez-vous? ASP.NET? Il y a plusieurs façons de vous connecter au pipeline ASP.NET ... le moteur d'exécution dépend de la mise en pool des objets pour traiter les demandes simultanément, cela fonctionnerait-il pour vous?
Je pense que vous seriez mieux de laisser n'importe quel backend DBMS que vous avez gérer les problèmes d'atomicité.
Quelque chose comme ça. L'environnement d'exécution ASP.NET fonctionne de la sorte.
Vous obtenez une requête ... disons que c'est la première requête que vous recevez de l'application ASP.NET. Maintenant, en fonction de la cartographie, IHttpHandlers et IHttpModules quelques choses vont se passer.
L'exécution exécutera la première requête avec des instances uniques des gestionnaires et des modules requis. Si c'est la toute première requête et que n'importe quel IHttpModule ou votre Global.asax a un événement OnStart qui se déclenchera. Ensuite, la demande sera traitée. Accompagné par tous les IHttpMoudles et le IHttpHandler.
Maintenant, si une deuxième requête est reçue alors que la première requête est en cours de traitement, il n'y a pas IHttpHandler libre ou IHttpModules, l'environnement d'exécution ASP.NET crée alors de nouvelles instances pour traiter ces demandes. Je ne suis pas sûr à 100% exactement quelle est la durée de vie de IHttpHandler et HttpModules, mais vous pouvez regarder cela sur MSDN.
Si vous avez des objets et des objets que vous souhaitez conserver pendant la durée d'une requête, vous devez les placer dans le contexte qui exécute votre requête. Vous pouvez le faire de plusieurs façons, mais je vous recommande de commencer à chercher dans IHttpModules plutôt que plus tard. Ils sont assez puissants. En outre, si vous sous-classez la classe HttpApplication et l'utilisez dans votre fichier Global.asax, vous disposerez d'une instance accessible de votre objet HttpApplication gérée par l'exécution ASP.NET et accessible via la propriété ApplicationInstance sur le HttpContext type. Donc oui, en le mettant en commun, cela signifie généralement que vous avez un groupe d'objets qui traînent. Chaque fois qu'une requête nécessite une instance de ce type, elle en récupère une du pool et gère la requête. Une fois la demande traitée, cet objet est renvoyé au pool pour être réutilisé.
Merci! Vos réponses ont été très utiles –
- 1. .NET en tant que client, Java en tant que serveur
- 2. SQL Server en tant que client Serivce Web
- 3. javaFX en tant que client webservice?
- 4. Interface de service Web - Type complexe en tant que paramètre?
- 5. Application OpenGL C++ en tant que service web
- 6. Objective-C Singleton instance en tant que statique?
- 7. Client de service Web Java:
- 8. Déploiement du client de service Web
- 9. SCardEstablishContext se bloque en tant que service
- 10. service web asmx: authentification client
- 11. Logiciel en tant que service - Base de données
- 12. Tomcat Journalisation en cours d'exécution en tant que service Windows
- 13. Rails service Web SOAP client
- 14. Publication du schéma en tant que problème de service wcf
- 15. WCF fonctionne en tant qu'application, mais pas en tant que service
- 16. Est-il possible de créer un service Web C# autonome, déployé en tant que service EXE ou Windows?
- 17. Service WCF avec client PHP - type complexe en tant que paramètre ne fonctionnant pas
- 18. Affichage des fenêtres d'un processus s'exécutant en tant que compte système ou en tant que service
- 19. Puis-je exécuter un script Python en tant que service?
- 20. Plusieurs instances de même application en tant que service Windows?
- 21. Expose une bibliothèque de classes en tant que service WCF
- 22. IIS s'exécutant en tant que service Compte avec AzMan
- 23. envoyer des données de formulaire en tant que service web dans symfony
- 24. Comment communiquer entre le périphérique CE 6.0 (en tant que serveur) et le PC (en tant que client)
- 25. BasicHttpBinding est-il réellement requis lors de l'exposition d'un service WCF en tant que service Web pour Client cible .NET 2.0?
- 26. Détails du client dans le service Web
- 27. Axis2 Web Service Client Generation - Types sans modification du client
- 28. WCF en tant que service Web avec la charge utile la plus faible possible
- 29. SOA - accès aux données pour les services métier en tant que service Web distinct ou non?
- 30. Comment envoyer des données XML en tant que requête à l'aide du service Web XML
Hey John, désolé de vous bug, mais j'ai ajouté un commentaire et je suis assez curieux de connaître votre opinion. Merci d'avance –