Question

Je ne suis pas vraiment sûr exactement comment devrait être formulée la question, donc s'il vous plaît soyez patient si je demande à la mauvaise chose.

J'écris une application ASP.NET à l'aide VB comme le code derrière la langue. J'ai une classe d'accès aux données qui se connecte à la base de données pour exécuter la requête (paramétrés, bien sûr), et une autre classe pour effectuer les tâches de validation - j'accéder à cette classe de ma page ASPX

.

Ce que je voudrais est de pouvoir stocker le côté serveur de données et attendre que l'utilisateur de choisir parmi quelques options en fonction de la validité des données. Mais à moins que je crois comprendre complètement, ayant des objets de données persistantes sur le serveur donnera des problèmes lorsque plusieurs utilisateurs se connectent?

Mon but ultime est qu'une fois que les données ont été validées à l'utilisateur final ne peut pas le modifier. Actuellement, je suis valider les données, mais je dois encore récupérer du formulaire Web après que l'utilisateur dit OK, ce qui évidemment laisse ouverte la possibilité d'injecter des données erronées soit accidentellement (peu probable) ou sur le but (peu probable pour l'utilisation, mais je préfère ne pas prendre la chance).

Alors, je suis complètement dans ma compréhension? Si oui, point quelqu'un peut me à une ressource qui fournit des instructions sur la conservation des données persistantes sur le serveur, ou de fournir l'instruction?

Merci!


Exemple concret:

Nous avons récemment embauché Inspecteur Gadget pour insérer des données pour les inspecteurs de signe qui vont « inspecter autour des panneaux de signalisation routière pour assurer qu'aucun d'entre eux ont été mutilés ou volés par la mastication bubble-gum, normalement dressées membres du conseil municipal des jeunes.

Si gadget peut prouver son courage alors il pourrait obtenir une promotion à faire les inspections des signes réels. Pour l'instant, son seul travail consiste à aller sur ce site intranet une information sur les inputing la plupart des inspections récentes. Le district, comté, route #, section de la route, et les dates du panneau a été installé et contrôlé.

Bien sûr, aucun d'entre nous qui étaient encore en vie dans les années 80 en retard sont familiers avec gadget ineptie. Ainsi, le site est sur la preuve Gadget que nous pouvons le faire. Le district / comté / itinéraire est tout rempli dans une liste déroulante, il n'a qu'à entrer manuellement le début et la fin de la section et les dates. À l'occasion, il tâtonne la souris et se termine en échangeant le début et la fin de la section, doh! Ainsi, les tours de texte en rouge pour l'avertir de l'erreur. Malheureusement, il a choisi de porter ses lunettes de soleil anti-rouge aujourd'hui qui tournent toutes les couleurs rouge au noir. Eh bien, après avoir essayé de soumettre les données qu'il lui montre un message d'erreur lui indiquant où et ce qu'il doit fixer. Malheureusement, il graisse doigter le clavier et au lieu de l'entrée 1,337 il a mis en 13.37 (miles) - et la route est à seulement 10 miles de long! Eh bien, maintenant un message (un div modal) apparaît et lui dit que le vrai kilométrage pour la route est 0-10, et que son entrée combinera trois sections de la route. Puis il est donné trois boutons pour choisir. Annuler, ce qui lui permet d'aller et de modifier ses données, Contraindre, qui convertira 13,37 à 10 et Override qui lui permettra de saisir les données de toute façon.

"Yowza!" Gadget a hurlé, et vous cliquez dessus Interrompre pour revenir en arrière et corriger son erreur. Eh bien la prochaine série de données qu'il entrée correctement, donc un message de confirmation en lui montrant sauté les changements qu'il allait faire et de demander si elle était OK pour continuer. Eh bien, malheureusement Inspecteur Gadget a renversé sa tasse de café, detritus diffusion sur son bureau. Dans sa hâte de le nettoyer, il a cliqué sur « OK », mais pas avant son électro-aimant Go-Go-Gadget accidentellement renversé quelques morceaux sur son ordinateur, en changeant le comté sous la forme de ARKANSAS à AKRSANAS, doh!

Si les données sont stockées sur le serveur sur le campus, et la seule information transmise était « OK » ou « Annuler », cela aurait pu être évité.


Bien sûr, je peux toujours valider nouveau après la "OK", mais il semble comme une solution de contournement hacky.

Quoi qu'il en soit, je l'espère que cela clarifie!

Était-ce utile?

La solution

Je pense que vous songez à utiliser le cache du serveur Web. Dans ASP.NET, vous pouvez utiliser Context.Cache pour stocker des données sur le serveur. Une fois un cache utilisateur est tout, tout autre utilisateur sur le serveur peut également y accéder.

Puisque les données sont mises en cache sur le serveur, vous voulez vider le cache à chaque fois que vous appelez une requête de mise à jour sur la base de données. Alors la prochaine fois que vous chargez les données, vous pouvez enregistrer à nouveau les données dans le cache.

Dans votre méthode de sélection, vérifiez si votre cache [key] est non nulle. Si elle est, puis charger les données de la base de données et puis enregistrez-le cache [touche] avant de retourner les données. Si ce n'est pas nulle, chargez simplement à partir du cache au lieu de la DB.

La clé que l'utilisation, vous pouvez contenir vos paramètres afin que vous ne devez pas filtrer les données du cache .... ou la clé peut juste être générique il stocke toutes vos données. Ensuite, vous pouvez effectuer une requête LINQ sur les données pour filtrer vos paramètres

J'espère que cela aide.

Autres conseils

Je pense que vous faites référence à Concurrency . Consultez le lien pour commencer à comprendre, si c'est ce que vous demandez au sujet. Vous aurez probablement à faire un peu plus de recherche en fonction de la fin de votre dos et votre situation spécifique. Encore une fois, si cela est ce que vous cherchez, vous pourriez être intéressé par particullary pessimiste concurrency.

http://en.wikipedia.org/wiki/Concurrency_control


EDIT: Après avoir lu votre exemple .... il semble que vous pouvez faire ce qui suit, bonne chance.

  1. le dossier "verrou" en utilisant un modèle d'accès concurrentiel pessimiste d'une sorte (sur la db puisque c'est où les données sont en fait) quand il est accessible par l'utilisateur inputing les données . C'est comme faire le dossier db lecture seule.

  2. Lorsque l'utilisateur touche ok vous auriez probablement à valider par le code de asp.net, et si la validation est passée, mettez à jour le db et déverrouiller le dossier db.

  3. Si l'utilisateur clique sur Annuler, ne met pas à jour le dossier db, déverrouiller juste.

  4. Si l'utilisateur veut forcer l'entrée, puis simplement mettre à jour le db et déverrouiller le dossier db.

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