2011-10-26 82 views
2

如果我使用WCF數據服務通過OData公開對象集合,並且我想阻止用戶執行可能太複雜或消耗太多資源的查詢,並且我能夠在返回結果之前以某種方式掛鉤查詢?使用WCF數據服務限制或修改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 第二部分還有一個示例如何攔截查詢(樣本在那裏寫出來,但您也可以在其中添加檢查代碼)。

+0

非常好!謝謝 – Ron