Я надеюсь создавать простой веб-сервис что когда опрошенные возвраты уникальный идентификатор. Идентификатор должен быть человекочитаемым (т.е. не гуид, вероятно, в форме 000023) и просто увеличен к 1 каждому разу его названный.
Теперь я должен полагать, что это могут назвать два различных приложения одновременно, и я не хочу, чтобы это возвратило то же число каждому приложению.
Есть ли другая опция, чем использование базы данных для хранения текущего числа?
Конечно, это было сделано прежде, может любой указывать на меня на некоторый исходный код, если это.
Спасибо,
Neil
Используйте фрагмент кода критического раздела для управления потоком по одному через фрагмент кода. Вы можете сделать это, используя оператор lock
или проявив немного более жесткость и напрямую используя мьютекс. Это гарантирует, что вы вернете разные номера каждому вызывающему абоненту.
Что касается его хранения, использование базы данных является излишним для возврата автоматически увеличивающегося числа - хотя SQLServer и Oracle (и, скорее всего, другие, но я не могу говорить за них) оба предоставляют функцию автоматического увеличения ключей, так что вы могли бы иметь вызванный веб-сервис, сгенерирует новую запись в таблице базы данных, вернет ключ, и вызывающий может использовать этот номер в качестве ключа для возврата к этой записи (если вы сохраняете больше данных позже после первоначального вызова). Таким образом, вы также позволяете базе данных беспокоиться о генерации уникальных чисел, вам не нужно беспокоиться о ее деталях - хотя это не лучший вариант, если у вас еще нет базы данных.
Другой вариант - сохранить его в локальном файле, хотя было бы дорого читать файл, увеличивать номер и записывать его обратно, и все это в критической секции.
вы можете использовать файл.
Псевдокод:
if (!locked('counter.txt'))
counter = read('counter.txt')
else
wait
startAgain
lock('counter.txt')
counter++
print counter
write('counter.txt', counter)
unlock('counter.txt)