我正在寻找创建一个简单的 Web 服务,当轮询时返回一个唯一的 id。ID 必须是人类可读的(即不是一个 guid,可能是 000023 的形式)并且每次调用它时简单地增加 1。
现在我需要考虑它可能同时被两个不同的应用程序调用,我不希望它向每个应用程序返回相同的数字。
除了使用数据库存储当前号码之外,还有其他选择吗?
当然这已经完成了,如果是的话,任何人都可以指出一些源代码。
谢谢,
尼尔
我正在寻找创建一个简单的 Web 服务,当轮询时返回一个唯一的 id。ID 必须是人类可读的(即不是一个 guid,可能是 000023 的形式)并且每次调用它时简单地增加 1。
现在我需要考虑它可能同时被两个不同的应用程序调用,我不希望它向每个应用程序返回相同的数字。
除了使用数据库存储当前号码之外,还有其他选择吗?
当然这已经完成了,如果是的话,任何人都可以指出一些源代码。
谢谢,
尼尔
使用一段关键部分代码通过一段代码一次控制一个流程。您可以使用该lock
语句或稍微硬核并直接使用互斥锁来做到这一点。这样做将确保您向每个呼叫者返回不同的号码。
至于存储它,使用数据库返回一个自动递增的数字是多余的——尽管 SQLServer 和 Oracle(很可能还有其他人,但我不能代表它们)都提供了一个自动递增的键功能,所以你可以调用 web 服务,在数据库表中生成一个新条目,返回键,调用者可以使用该数字作为返回该记录的键(如果您在初始调用后保存更多数据)。这样,您还可以让数据库担心唯一编号的生成,您不必担心它的细节——尽管如果您还没有数据库,这不是一个好的选择。
另一种选择是将其存储在本地文件中,尽管读取文件、增加数字并将其写回,所有这些都在关键部分中会很昂贵。
你可以使用一个文件。
伪代码:
if (!locked('counter.txt'))
counter = read('counter.txt')
else
wait
startAgain
lock('counter.txt')
counter++
print counter
write('counter.txt', counter)
unlock('counter.txt)