代码之家  ›  专栏  ›  技术社区  ›  Eric Eijkelenboom

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

  •  4
  • Eric Eijkelenboom  · 技术社区  · 14 年前

    我有一个wcf服务(basichttpbinding、basic authentication、iis 6.0),我想限制每小时的调用次数。- 以用户为基础 . 例如,每个用户每小时最多可拨打1000次电话(如谷歌地图等)。

    我还希望实现某种订阅机制,以便用户可以跨各种“价格计划”升级其呼叫限制。

    我知道我可以通过一个习惯 Inspector ,由包含某种“订阅”表和计数器的DB提供支持,但我希望避免重新设计控制盘。

    有没有人有这样的经验?是否有现成的第三方项目/库支持此功能?

    谢谢。埃里克

    2 回复  |  直到 14 年前
        1
  •  2
  •   Keith Bluestone    14 年前

    我不知道有没有现成的包装来做这个(有人在听吗?可能是个机会!)但我对这个问题的快速思考是:

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

    2. 划分“有限功能” 在服务级别 如果可能——不是单独的操作或方法。如果您可以将这些限制应用于整个服务的使用,并且只应用于特定的或单个的方法,那么一切都会变得更容易:代码、跟踪、用户的理解等等。 一般来说 ,也就是说…

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

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

        2
  •  0
  •   Shiraz Bhaiji    14 年前

    最简单的方法是向服务中添加代码,首先检查代码是否达到了极限,然后更新计数器。

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