我们遇到这样的情况:用户向服务器提交 xml 文件,然后检查该文件是否有唯一引用,并将新引用存储在数据库中。 如果他们再次提交相同的参考文献,则会发回一条错误消息,并且重复的参考文献不会存储在数据库中。
这似乎工作得很好,直到一些高手决定用大量异步调用来轰炸服务器,这似乎失败了,因为唯一的引用检查是同时进行的并且漏网了。
有什么方法可以通过停止对服务器的异步调用来防止这种情况吗?
我创建了一个 ip 地址和 threadId 的字典,并尝试阻止同时处理 2 个调用
您无法更改异步行为,但您可以实现一个单例类,该类实现锁定语句 (C#) 或 SyncLock (VB),以确保您的函数一次处理一个请求。 您可以从控制器调用单例函数。 每个请求本质上都会等待先前对该函数的调用完成。 实际上,您保留了控制器方法的异步功能,但串行处理对单例函数的每个调用。