WCF:限制每小时的呼叫数 - 每个用户

时间:2010-04-20 08:49:21

标签: wcf web-services restriction

我有一个WCF服务(basicHttpBinding,基本身份验证,IIS 6.0),我想在其上限制每小时的呼叫数量 - 基于用户。例如,每位用户每小时最多1000次通话(谷歌地图等)。

我还希望实施某种订阅机制,以便用户可以在各种“价格计划”中升级其通话限制。

我知道我可以使用自定义Inspector实现此目的,由包含某种“订阅”表和计数器的数据库支持,但我想避免重新发明轮子。

有没有人有这方面的经验?是否有开箱即用的第三方项目/图书馆?

感谢。埃里克

2 个答案:

答案 0 :(得分:2)

我不知道是否有任何现成的套餐可以做到这一点(任何人都在听?可能是个机会!),但这是我对这个问题的快速思考:

  1. 您的要求是“在最后一小时内” - 让我们说“时间段”而不是小时,因为这可以很容易地改变。您必须在该时间段内跟踪该用户的所有呼叫,并且具有某种机制来滚动或归档此数据。如果您要存储在数据库中,这可能是一个重要的性能问题,具体取决于您的数据库,用户数量,每个时间段的调用次数等。设计一个通用接口可以很容易如果需要,可以在缓存中拼接 - 但是您还需要跟踪检索API /服务限制信息所花费的总时间。

  2. 如果可能,在服务级别对“有限功能”进行分区 - 而不是单独的操作或方法。如果您可以将限制应用于整个服务的使用以及仅使用特定或单个方法,则一切都会更容易:代码,跟踪,用户的理解等。一般,即......

  3. 拦截的适当位置& check不在消息检查器IMHO中,而是在 OperationInvoker 中。通过服务范围的行为安装自定义操作调用程序,您将锁定整个服务。此外,您还可以访问消息后处理信息,例如经过身份验证的用户名等。请参阅Skonnard关于MSDN“Extending WCF via Behaviors”(http://msdn.microsoft.com/en-us/magazine/cc163302.aspx#S6)的文章。

  4. 希望这有帮助。如果您决定自己做,请确保处理并发(多个线程同时调用您的服务)!如果您有更多问题,那么人们可能会了解您的情况的基本参数,例如用户数量,呼叫,可扩展性问题(例如,Web场或单个服务器?)。 - 基思

答案 1 :(得分:0)

最简单的方法是向您的服务添加代码,它首先要做的是检查它是否已达到限制,然后更新计数器。

如果从体系结构的角度来看,它是您的业务逻辑,通常应该在业务层中实现。