2012-07-26 82 views
0

我有我的組織中的應用程序正在使用的wcf數據服務。它包含以下實體:WCF數據服務條件查詢攔截器

Client 
User 
Membership 

的數據是建立在多租戶,目前需要我們稱之爲客戶端的字符串,或者客戶端的唯一ID字符串表示,將傳入的作爲部分路徑,我將其提取並添加到查詢攔截器中作爲過濾器。直到最近,當我們有一個新的客戶來到有一個有許多孩子的父母客戶字符串的時候,這一切都非常有效。所以結果是一個包含所有查詢傳入的clientids列表的查詢,如「in(.....)」。不錯,但是當這個客戶端現在試圖查詢會員資格時,他們有9k + clientids傳入。生成的查詢似乎在單獨執行時相當快速地運行,但整個db事務持續時間大於30秒。

如果提供了特定的用戶標識,我最終希望找到繞過此過濾器的方法。該URL看起來是這樣的:

http://service.com/clienta/Users(1234)/memberships

如果一個特定的編號,給出了用戶或成員,我可以避開過濾器的有效實現相同的最終結果。我們不能有就是有人做這樣的事情:

http://service.com/clienta/memberships

沒有任何過濾器。

我意識到這可能是分散的,需要更多的細節,因爲這有點匆忙。請提出任何問題。任何幫助或指導非常感謝。

回答

0

你可以使用查詢攔截器來攔截請求,那麼如果你的條件滿足,以避免過濾,簡單地忽略它?

你也可以轉移到服務方法,並傳遞你的論點,並做任何你想做的事情。

+0

如果我不能像條件攔截器那樣創建一個更全面的應用程序,那真是太多了我的後備計劃。我猜我必須走這條路。你碰巧知道是否有簡單的方法來確定是否提供了一個ID?我可以使用正則表達式,但是如果在框架內有一個機制來指定這個機制,我寧願避免這種情況。感謝您的答覆! – RockyMountainHigh 2012-07-31 15:34:51

+0

使用服務方法,您可以從客戶端傳入任何您想要的東西。這可能是你想要的主要參數。然後,您可以檢查該參數是否爲空並從那裏開始。 – muck41 2012-07-31 17:17:25

+0

對於查詢intecepter路由,您無權訪問查詢字符串。對於查詢攔截器,現在我想到了它,我不知道我能夠獲取請求url,以便我可以看到參數,我相信攔截器純粹增加了額外的url參數。但是,如果您知道哪些用戶遇到該問題,則可以使用查詢攔截器檢查活動用戶,然後在url中添加更多篩選器以限制其記錄,並讓沒有問題的用戶正常繼續。與此類似:bondigeek.com/blog/2010/09/06/... – muck41 2012-07-31 17:37:44