Je suis en train de concevoir une application Web ASP.NET 4.0 où les administrateurs peuvent créer une enchère avec une expiration. L'heure d'expiration serait stockée dans une base de données. Comment puis-je m'assurer que l'enchère se termine à l'heure prédéterminée, compte tenu du fait qu'une instance d'application peut ne pas être en cours d'exécution lorsqu'il est temps? L'application sera hébergée avec IIS7. Je considère le service Windows, mais je me demande quelles sont les autres options.Quelle est la méthode préférée pour gérer un événement minuté avec une application Web?
Répondre
Un service Windows qui gère les événements temporisés est la meilleure pratique. L'utilisation d'un System.Threading.Timer dans ASP.NET est mauvaise juju; Cela PEUT fonctionner dans votre cas, car le changement effectué n'affecte pas directement l'interface utilisateur, mais je ne parierais pas que cela fonctionnerait parfaitement. Si vous devez planifier des événements en arrière-plan d'une application Web, utilisez une application serveur.
Une chose à garder à l'esprit; vous pouvez avoir des centaines ou des milliers d'enchères ouvertes à la fois. Si vous définissez une minuterie sur chaque enchère lors de son ouverture, vous aurez des centaines ou des milliers de threads inactifs gérés par ce serveur. Je ne chercherais que les ventes aux enchères qui se termineraient avant la prochaine fois que vous feriez normalement un sondage. Cela vous ramènerait peut-être à quelques douzaines de fils d'attente. Si vous écrivez le prochain eBay, cependant, même cela va s'étouffer lorsque vous obtenez des centaines de milliers, ou des millions, de ventes aux enchères, et plusieurs centaines ou milliers commencent et se terminent chaque minute.
Si vous voulez qu'il soit fiable à 100%, un service Windows exécutant toute la logique programmée est la solution. Comme vous le dites, vous ne pouvez pas faire confiance à une application Web, car elle ne fonctionne même pas.
Vous pouvez choisir entre deux scénarios ici:
- Lazy avec l'application web
- active avec un service
Scénario Lazy
Sauf si vous devez interagir instantanément avec le gagnant d'une vente aux enchères, vous pouvez attendre le démarrage de l'application et laisser l'application rmine s'il y a des ventes aux enchères qui ont expiré. Rassemblez-les au moment et manipulez-les en conséquence.
Scénario actif
Créer un service qui prend la première vente aux enchères expirant de la DB. Stockez ce DateTime et laissez le service dormir jusqu'à l'expiration de la vente aux enchères. Augmentez le service à cette DateTime et traitez l'enchère expirante. Ensuite, laissez le service rechercher les prochaines enchères et expirez à nouveau. Et ainsi de suite .. Je pense que The Windows Workflow Foundation contient tous les outils et les exigences pour cette pratique.
Quelque chose entre
Activer un programmateur qui se réveille vous web-app toutes les heures/demi-heure/15 minutes et faire les choses paresseux. Utilisez un planificateur comme HostMonitor.
+1. Beau résumé, ne pouvait pas mieux l'écrire – citronas
- 1. Quelle est la méthode préférée pour intégrer un graphique SWF dans une application Flex 4?
- 2. Quelle est votre méthode préférée pour conceptualiser un projet?
- 3. Quelle est la méthode préférée pour un 'WSDL' pour le service Web REST?
- 4. Quelle est une bonne méthode pour l'intégration Desktop & Application Web?
- 5. Quelle est la méthode préférée pour charger une DLL sur un plugin Eclipse RCP?
- 6. Quelle est votre façon préférée de gérer le développement multiplateforme?
- 7. Quelle est votre méthode préférée pour nommer vos versions logicielles?
- 8. Quelle est la méthode préférée pour définir des relations étrangères pour une entité?
- 9. quelle méthode d'authentification est la meilleure pour une application client devant interagir avec une application Web qui a l'authentification?
- 10. Quelle est la méthode préférée pour télécharger sur un serveur à partir d'Android?
- 11. Quelle est la meilleure méthode pour localiser une application asp.net?
- 12. Quelle est la méthode préférée pour réagir à un changement d'élément sélectionné à l'aide de TreeView?
- 13. Quelle est la méthode préférée pour récupérer des noms de classes avec jQuery?
- 14. Rails: Quelle est la gemme Mailchimp préférée?
- 15. Quelle est la méthode recommandée pour valider un contrôle ASP.net avec une méthode existante?
- 16. Quelle est la méthode préférée pour démarrer un formulaire en utilisant des aides HTML?
- 17. Quelle est la méthode préférée de gestion des clés manquantes ou indisponibles dans un fichier web.config?
- 18. Quelle est la méthode préférée pour lire/écrire du contenu à partir d'une URL en Java?
- 19. Quelle est la méthode préférée pour rapprocher plusieurs pages par défaut?
- 20. Quelle est votre convention préférée pour organiser un projet ASP.NET?
- 21. Evénement keyDown CF (minuté)
- 22. Quelle est la meilleure approche pour faire une application web pour dessiner et modifier une image?
- 23. Quelle est la manière préférée de gérer cette connexion TCP en C#?
- 24. Quelle est la méthode "appropriée" pour déterminer si un fichier SWF s'exécute dans une application AIR?
- 25. Quelle est la méthode préférée pour générer des identifiants localement uniques dans VB.NET?
- 26. Tabbed VS Tree pour la navigation. Quelle est l'approche préférée?
- 27. Quelle technologie pour une application Web professionnelle?
- 28. Gérer un événement avec LinkButton
- 29. Quelle est la méthode préférée pour appeler les services REST dans MonoTouch?
- 30. Méthode préférée pour recharger la page avec JavaScript?
pourquoi tant de threads? pour chaque vente aux enchères? pourquoi pas juste le premier qui expire? –
Cela fonctionne aussi. Pour un site occupé, vous voudrez probablement toujours avoir quelques threads qui suivent la fin et qui se terminera dans les prochaines secondes après cela. Le point était, ne crée pas un fil de minuterie pour chaque enchère unique. – KeithS