2011-10-26 7 views
2

WCF Data Servicesを使用してODataを通じてオブジェクトのコレクションを公開しているときに、ユーザーが複雑すぎるリソースやリソースを多量に消費するクエリを実行しないようにするには、結果が返される前に何とかクエリにフックできるようになりましたか?WCF Data Servicesを使用してODataソースのクエリを制限または変更する

私が理解するところでは、ユーザーがクライアント側でLINQクエリを実行すると、これはすべてのクエリパラメータでREST URLに変換され、クエリはサーバー側で実行されます。もしそうなら、これは何とかフックできるようにしたいと思っていて、特定の操作だけに制限することができます。

+0

[QueryInterceptor]属性が見つかりました。これにより、結果コレクションの特定のエンティティを除外できます。しかし、もっとコントロールしたいと思っています。たぶんURLを調べて、必要ならば変更してください – Ron

答えて

1

サーバーでは、各入力クエリがLINQ式に変換され、データコンテキストによって公開されるIQueryableに対して実行されます。 IQueryableをラップして、実行するLINQを検査し、複雑すぎる場合は失敗することができます。 私は、サービスが生成するLINQの式ツリーと、それらにマップされるクエリについて、一連のブログ投稿を書いています。 http://blogs.msdn.com/b/vitek/archive/2010/02/25/data-services-expressions-part-1-intro.aspx 2番目の部分には、クエリをインターセプトする方法のサンプルもあります(そこにあるサンプルが書きますが、そこにも検査コードを追加できます)。

+0

非常にいいです!ありがとう – Ron

関連する問題