2010-04-20 107 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

最簡單的方法是將代碼添加到您的服務中,它所做的第一件事是檢查它是否達到極限,然後更新計數器。

如果從體系結構的角度來看,它是您的業務邏輯,通常應該在業務層實現。