我有一个在天蓝色webfarm中运行的REST Web服务,我需要防止重放附件。
每个请求都会在几分钟内包含唯一的Cryptographic nonce(只允许一次的令牌)。
现在我使用数据库创建一个以nonce作为主键的条目。这意味着如果一个Web服务器可以在数据库中插入该行,我确信没有其他Web服务器收到具有相同nonce的请求。实际上我使用表存储(使用rowkey / partitionkey作为主键)...而不是SQL Azure。
我的问题是桌面存储速度很慢(插入一行需要20-30ms),我正在寻找更快的解决方案。
.NET是否有分布式共享事务内存库?重要的是我不要引入单点故障(例如,在一台服务器上运行内存数据库)。
奖励:因为它在Azure中运行我不知道我的服务器的名称或IP地址,并且webfarm中的服务器数量经常发生变化。
答案 0 :(得分:2)
也许AppFabric缓存服务? http://msdn.microsoft.com/en-us/magazine/gg983488.aspx
答案 1 :(得分:0)
我会考虑memcached(在Azure上使用的链接:http://blog.smarx.com/posts/memcached-in-windows-azure),因此nonce存储很快,然后为了持久性我也(异步)将nonce存储在表存储中。
对于性能,在读取时,我将异步执行表存储检查,并检查读取是否应在退出主读取方法时继续。