2010-04-20 43 views
4

我有一个WCF服务(basicHttpBinding,基本认证,IIS 6.0),我想限制每小时的呼叫数 - ,用户为。例如,每个用户每小时最多拨打1000个电话(Google Maps等)。WCF:每小时呼叫次数限制 - 每个用户

我也想实施某种订阅机制,以便用户可以跨各种“价格计划”升级呼叫限制。

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

有没有人有这样做的经验?有没有第三方项目/库支持这个开箱即用?

谢谢。 Eric

回答

2

我不知道是否有任何现成的,现成软件包要做到这一点,但这里有关于这个问题我最新的想法(听人可能是一个机会呢?!):

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

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

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

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

+0

感谢您的反馈基思,你有一些好点。是的,OperationInvoker似乎是正确的选择。这似乎是我坚持DIY解决方案:) – 2010-07-09 19:41:52

0

最简单的方法是将代码添加到您的服务中,它所做的第一件事是检查它是否达到极限,然后更新计数器。

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

相关问题