2010-04-20 3 views
4

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

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

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

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

Спасибо. Eric

ответ

2

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

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

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

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

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

+0

Благодарим за отзыв. Кейт, у вас есть хорошие моменты. Да, OperationInvoker кажется правильным выбором. Кажется, я застрял в решении DIY :) –

0

Проще всего добавить код в свой сервис, первое, что он делает, это проверить, достиг ли он предела, а затем обновляет счетчик.

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

 Смежные вопросы

  • Нет связанных вопросов^_^