2012-07-26 53 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