【问题标题】:WCF: limit number of calls per hour - per userWCF:限制每小时的呼叫次数 - 每个用户
【发布时间】:2011-02-10 01:15:43
【问题描述】:

我有一个 WCF 服务(basicHttpBinding、基本身份验证、IIS 6.0),我想限制每小时的调用次数 - 基于用户。例如,每个用户每小时最多可拨打 1000 次电话(例如 Google 地图等)。

我还想实现某种订阅机制,以便用户可以在各种“价格计划”中升级他们的通话限制。

我知道我可以通过自定义Inspector 来实现这一点,该数据库由包含某种“订阅”表和计数器的数据库提供支持,但我想避免重新发明轮子。

有人有这方面的经验吗?是否有开箱即用的 3rd 方项目/库支持此功能?

谢谢。埃里克

【问题讨论】:

    标签: wcf web-services restriction


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的反馈,Keith,您得到了一些好处。是的,OperationInvoker 似乎是正确的选择。看来我被 DIY 解决方案卡住了 :)
    • 链接已损坏,但我猜 Carlos Figueira 的 MSDN 博客会存活更长时间,因为他是从一开始就与 WCF 团队合作的开发人员之一:blogs.msdn.com/b/carlosfigueira/archive/2011/03/14/…
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多