Hallo,
Ich habe einen Webservice, welcher in einer SQL-Tabelle Gutschein-Codes überprüft.
Benutzer A schickt dem Webservice einen Gutscheincode "123".
Benutzer B schickt ebenfalls zeitgleich den gleichen Gutscheincode.
Wie kann ich z.B. verhindern, wenn der Code von Benutzer A überprüft wird,
gleichzeitig das Prüfen des Codes von Benutzer B verhindert wird.
kurz gesagt, es darf immer nur ein Code geprüft werden.
Wie könnte ich das realisieren ?
Hallo!
Ich denke folgendes könnte dir eventuell weiterhelfen:
http://www.sqlteam.com/item.asp?ItemID=250
Grüße
Danke für deine Antwort.
Gibt es noch andere Möglichkeiten außer Row-Locking?
Ich habe bei der aufgezeigten Lösung ein wenig Angst vor Seiten-effekte, die ich nicht mehr steuern kann ?
Warum geht nicht einfach, eine SQL Statment abzufeuern und den Gutschein mit eine Bool Feld Ungültig zu erklären?
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Original von LastGentleman
Warum geht nicht einfach, eine SQL Statment abzufeuern und den Gutschein mit eine Bool Feld Ungültig zu erklären?
das ist genauso anfällig für eine Race-Conditions,
auch wenn die Wahrscheinlichkeit weiter sinkt, dass zwei Anfragen so kurz nacheinander kommen, dass beide den Gutschein für gültig erachten.
und wenn du eine ID generierst
diese ID in dei Gutschein Tabelle einträgst
und dann die Tabelle ausließt und dann schaust ob wirklich deine ID drinnen steht.
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein