6

我正在寻找创建一个简单的 Web 服务,当轮询时返回一个唯一的 id。ID 必须是人类可读的(即不是一个 guid,可能是 000023 的形式)并且每次调用它时简单地增加 1。

现在我需要考虑它可能同时被两个不同的应用程序调用,我不希望它向每个应用程序返回相同的数字。

除了使用数据库存储当前号码之外,还有其他选择吗?

当然这已经完成了,如果是的话,任何人都可以指出一些源代码。

谢谢,

尼尔

4

2 回答 2

1

使用一段关键部分代码通过一段代码一次控制一个流程。您可以使用该lock语句或稍微硬核并直接使用互斥锁来做到这一点。这样做将确保您向每个呼叫者返回不同的号码。

至于存储它,使用数据库返回一个自动递增的数字是多余的——尽管 SQLServer 和 Oracle(很可能还有其他人,但我不能代表它们)都提供了一个自动递增的键功能,所以你可以调用 web 服务,在数据库表中生成一个新条目,返回键,调用者可以使用该数字作为返回该记录的键(如果您在初始调用后保存更多数据)。这样,您还可以让数据库担心唯一编号的生成,您不必担心它的细节——尽管如果您还没有数据库,这不是一个好的选择。

另一种选择是将其存储在本地文件中,尽管读取文件、增加数字并将其写回,所有这些都在关键部分中会很昂贵。

于 2010-03-22T12:13:45.183 回答
0

你可以使用一个文件。

伪代码:

if (!locked('counter.txt'))
   counter = read('counter.txt')
else
   wait
   startAgain
lock('counter.txt')
counter++
print counter
write('counter.txt', counter)
unlock('counter.txt)
于 2010-03-22T12:13:12.547 回答