我正在编写一个托管在 IIS 上的 ASP.NET ApiController。在一个动作中,我需要调用一个名为 A 的 Web 服务,该服务由一家名为腾讯的公司提供。该服务要求我使用密钥进行身份验证。密钥是通过调用另一个Web界面生成的,来自腾讯的B,密钥有效期为3小时。服务 B 每天的通话次数有限制。因此,当我想使用 A 时,我无法调用 B。我只能调用 B 一次并将密钥存储在数据库中以备将来使用。
这意味着每次我想使用服务 A 时,我都需要检查数据库中密钥的验证,如果它已过期,则调用 B 并获取一个新的。
现在,当我需要通过调用 B 来更新我的密钥时,如果在返回新密钥之前,再次调用 ApiController 操作怎么办?新的请求也会发现数据库中的key已经失效,然后继续调用B,使得A新获取的key失效,导致A再次获取key,死循环。
我的问题是,你如何摆脱这种担忧?我该如何开始?来自 SQL、IIS 或 ASP.NET?
我正在使用 EF6 读取/写入数据库并使用 ASP.NET MVC 5。
谢谢你的帮助!
-- 补充 -- 我被建议使用 lock 关键字。但是,我想放心,知道锁将保护所有 IIS 请求中的数据库读/写部分。那么是否有任何关于 IIS 如何处理对同一个 ASP.NET 模块的多个请求并对其进行并发控制的文章?