4

WCFサービス(basicHttpBinding、基本認証、IIS 6.0)があり、ユーザーベースで1時間あたりの呼び出し数を制限したいと考えています。たとえば、ユーザーあたり、1時間あたり最大1000回の通話(Googleマップなど)。

また、ユーザーがさまざまな「料金プラン」全体で通話制限をアップグレードできるように、ある種のサブスクリプションメカニズムを実装したいと思います。

ある種の「サブスクリプション」テーブルとカウンターを含むDBに支えられたカスタムインスペクターでこれを達成できることは知っていますが、車輪の再発明は避けたいと思います。

誰かがこれをした経験がありますか?これをすぐにサポートするサードパーティのプロジェクト/ライブラリはありますか?

ありがとう。エリック

4

2 に答える 2

2

これを行うための既製のパッケージがあるかどうかはわかりませんが(聞いている人はいますか?機会になる可能性があります!)、この問題についての私の簡単な考えは次のとおりです。

  1. 要件は「過去1時間以内」です。たとえば、時間ではなく「期間」としましょう。これは簡単に変更できるためです。その期間内のそのユーザーによるすべての呼び出しを追跡する必要があります。また、このデータをロールオフまたはアーカイブするための何らかのメカニズムが必要です。データベースに保存している場合、データベース、ユーザー数、期間ごとに行われた呼び出しの数などによっては、これは重大なパフォーマンスの問題になる可能性があります。必要に応じてキャッシングでスプライスしますが、API/サービス制限情報の取得に費やされた合計時間も追跡する必要があります。

  2. 可能であれば、「制限された機能」をサービスレベルで分割します。個々の操作や方法ではありません。サービス全体の使用と特定のメソッドまたは個別のメソッドのみに制限を適用できる場合は、コード、追跡、ユーザーの理解など、すべてが簡単になります。一般的には...

  3. 傍受してチェックする適切な場所は、メッセージインスペクターIMHOではなく、OperationInvokerです。サービス全体の動作を介してカスタム操作呼び出し元をインストールすると、サービス全体がロックダウンされます。さらに、認証されたユーザー名などのメッセージ処理後の情報にアクセスできます。MSDNのSkonnardの記事「動作によるWCFの拡張」(http://msdn.microsoft.com/en-us/magazine/ )を参照してください。 cc163302.aspx#S6)。

これがお役に立てば幸いです。自分で行う場合は、並行性(複数のスレッドが同時にサービスを呼び出す)を処理するようにしてください。さらに質問がある場合は、ユーザーの数、呼び出し、スケーラビリティの問題(Webファームや単一サーバーなど)など、状況の基本的なパラメーターを知っておくと役立つでしょう。-キース

于 2010-07-01T18:05:37.527 に答える
0

最も簡単なのは、サービスにコードを追加することです。最初に、制限に達しているかどうかを確認してから、カウンターを更新します。

アーキテクチャの観点から見ると、それはビジネスロジックであり、通常はビジネスレイヤーに実装する必要があります。

于 2010-06-25T13:43:04.087 に答える