2010-04-20 6 views
4

사용자 당의 시간당 호출 수를 제한하려는 WCF 서비스 (basicHttpBinding, 기본 인증, IIS 6.0)가 있습니다. 예를 들어, 사용자 당 최대 1,000 개의 통화 (시간별) (예 : Google지도 등).WCF : 시간당 호출 수 제한 - 사용자 당

사용자가 다양한 '가격 계획'에 따라 통화 제한을 업그레이드 할 수 있도록 가입 메커니즘을 구현하고 싶습니다.

나는 사용자 정의 Inspector으로이를 달성 할 수 있다는 것을 알고 있는데, 일종의 '가입'테이블과 카운터가 포함 된 DB가 뒷받침하지만 휠 재발견을 피하고 싶습니다.

누구나이 경험이 있습니까? 이 상자를 지원하는 타사 프로젝트/라이브러리가 있습니까?

감사합니다. Eric

답변

2

이 할 수있는 기성품 패키지가 있다면 모르겠지만, 여기 내 빠른 생각이 문제에있다 (듣는 사람이 기회가 될 수있다!?) :

  1. 귀하의 요구 사항은 "마지막 시간"입니다 - 쉽게 변경할 수 있기 때문에 시간 대신 "시간 기간"이라고합시다. 특정 기간 내에 해당 사용자가에 전화를 걸어 의 모든 정보를 추적하고이 데이터를 롤아웃하거나 보관하는 메커니즘을 사용해야합니다. 데이터베이스에 저장하는 경우 이는 데이터베이스, 사용자 수, 기간별 호출 수 등에 따라 중요한 성능 문제가 될 수 있습니다. 일반 인터페이스를 설계하는 것은 매우 쉽습니다. 필요한 경우 캐싱에 스플 라이스를 추가합니다.하지만 API/서비스 한도 정보를 검색하는 데 소요 된 총 시간도 추적해야합니다.

  2. 가능한 경우 서비스 수준에 "제한된 기능"을 분할하십시오. 개별적인 조작이나 방법이 아닙니다. 코드, 추적, 사용자 이해 등 일반적으로, 즉

  3. 에 전체 서비스 사용과 특정 또는 개별 방법에 제한을 적용 할 수 있다면 모든 것이 더 쉬울 것입니다.
  4. & 수표를 찍는 적절한 장소는 메시지 관리자 IMHO가 아니라 OperationInvoker입니다. 서비스 전체 동작을 통해 사용자 지정 작업 호출자를 설치하면 전체 서비스가 잠기 게됩니다. 또한 인증 된 사용자 이름 등 메시지 처리 후 정보에 액세스 할 수 있습니다. MSDN "Extending WCF via Behaviors"(http://msdn.microsoft.com/en-us/magazine/cc163302.aspx#S6)의 Skonnard의 기사를 참조하십시오.

희망이 있습니다. 스스로 결정하기를 원한다면 동시성 (동시 스레드를 동시에 호출하는 다중 스레드)을 처리해야합니다! 더 궁금한 점이있는 경우 사용자의 양, 통화 수, 확장 성 관련 문제 (예 : 웹 팜 또는 단일 서버)와 같은 상황의 기본 매개 변수를 사람들이 알면 도움이 될 것입니다.- Keith

+0

의견에 감사드립니다. Keith, 좋은 지적이 있습니다. 예, OperationInvoker가 올바른 선택입니다. 내가 DIY 솔루션으로 붙어있는 것처럼 보인다 :) –

0

가장 간단한 방법은 서비스에 코드를 추가하는 것입니다. 먼저 코드가 한계에 도달했는지 확인한 다음 카운터를 업데이트합니다.

아키텍처 관점에서 보면 비즈니스 로직이며 일반적으로 비즈니스 계층에 구현되어야합니다.