WCF: ограничение количества звонков в час - на пользователя - PullRequest
4 голосов
/ 20 апреля 2010

У меня есть служба WCF (basicHttpBinding, базовая аутентификация, IIS 6.0), для которой я хочу ограничить количество вызовов в час - для пользователя . Например, не более 1000 звонков на пользователя в час (например, Google Maps и т. Д.).

Я также хочу реализовать своего рода механизм подписки, чтобы пользователи могли обновлять свой лимит вызовов в рамках различных «ценовых планов».

Я знаю, что мог бы достичь этого с помощью пользовательского Инспектора , подкрепленного БД, содержащей какую-то таблицу «подписки» и счетчик, но я бы хотел не изобретать велосипед заново.

У кого-нибудь есть опыт в этом? Существуют ли сторонние проекты / библиотеки, которые поддерживают это из коробки?

Спасибо. Eric

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Я не знаю, есть ли какие-либо готовые пакеты для этого (кто-нибудь слушает? Может быть возможность!), Но вот мои быстрые мысли по этому вопросу:

  1. Ваше требование "в течение последнего часа" - скажем, "период времени" вместо часа, поскольку это можно легко изменить. Вам нужно будет отслеживать все вызовы этого пользователя в течение определенного периода времени, а также иметь какой-то механизм для отката или архивирования этих данных. Если вы храните в базе данных, это может быть серьезной проблемой производительности, в зависимости от вашей базы данных, количества пользователей, количества звонков за период времени и т. Д. Довольно просто разработать общий интерфейс, который позволит вам Если вам это нужно, используйте кеширование, но вам также потребуется отслеживать общее время, потраченное на извлечение информации об ограничениях API / службы.

  2. Разделить «ограниченную функциональность» на уровень обслуживания , если это возможно, а не на отдельную операцию или метод. Если вы сможете применить ограничения к использованию всего сервиса и только к определенным или отдельным методам, все будет проще: код, отслеживание, понимание пользователя и т. Д. В общем , то есть. ..

  3. Надлежащее место для перехвата и проверки не в инспекторе сообщений IMHO, а в OperationInvoker . Установите вызывающий пользовательский оператор через общесервисное поведение, и вы заблокируете весь сервис. Кроме того, у вас будет доступ к информации после обработки сообщения, такой как имя пользователя, прошедшего проверку подлинности, и т. Д. См. Статью Сконнарда по MSDN " Расширение WCF с помощью поведения " (http://msdn.microsoft.com/en-us/magazine/cc163302.aspx#S6).

Надеюсь, это полезно. Если вы решите сделать это самостоятельно, убедитесь, что обрабатываете параллелизм (несколько потоков обращаются к вашему сервису одновременно)! Если у вас есть дополнительные вопросы, людям, вероятно, будет полезно знать основные параметры вашей ситуации, такие как количество пользователей, звонки, проблемы масштабируемости (например, веб-ферма или один сервер?). - Кит

0 голосов
/ 25 июня 2010

Самое простое - это добавить код к вашему сервису, сначала он проверяет, достиг ли он предела, затем обновляет счетчик.

Если вы посмотрите на это с точки зрения архитектуры, это ваша бизнес-логика, и ее обычно следует реализовывать на бизнес-уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...