當考慮將面向服務的體系結構與利用SQL在查詢數據時優化性能的優秀UI結合使用時,我感到有些震驚。用SQL查詢Web服務
例如,ASP.NET的DevExpress網格視圖非常酷,它將所有過濾,排序和分頁邏輯委託給數據庫服務器。但是,這假定從具有SQL能力的數據庫服務器檢索到的數據是。
如果我想在數據庫和UI層之間引入Web服務層,並讓UI使用Web服務來查詢數據,該怎麼辦?
- 如何設計Web服務和UI,以便我可以通過Web服務將過濾請求從UI傳遞到數據庫?
- 我是否需要提供
List QueryData(string sqlQuery)
樣式的Web服務,並且必須自行解析SQL字符串以確保安全/訪問限制? - 或者有沒有什麼好的框架或設計指導方針來承擔我的這個負擔?
這一定是一個非常普遍的問題,我相信它已經解決得比較充分了,對嗎?
我主要感興趣的是基於.NET/C#的或兼容的解決方案。
編輯:我找到了OData和Microsoft WCF Data Services。如果我是正確的,基於OData的應用程序可以看看如下:
- 用戶 --- /給我1(記錄1..10)/ --->ASP.NET服務器控制(當然,經由HTTP)
- ASP.NET服務器控制 ---/LINQ查詢/ --->數據服務客戶端
- 數據服務客戶端 ---/OData的查詢/ --->WCF數據服務
- WCF數據服務 ---/LINQ查詢/ --->實體框架
- 實體框架 ---/SQL查詢/ --->數據庫
如果我有這個權利,我的DevExpress服務器控件應該能夠委託一個過濾請求(例如只給我前10名)通過所有這些層到數據庫,然後使用它的索引等來執行該查詢。
是嗎?
編輯︰看到這個線程來生活是一種喜悅:-)很難決定接受什麼答案,因爲所有對我來說似乎同樣好......
你確定你不是「只是」需要實現IQueryable並使web服務調用到後端?不熟悉組件... – 2011-03-29 07:03:06
不錯的問題,我一直在努力,但從來沒有想出一個優雅的解決方案。在之前的實現中,我提供了一個自定義的「過濾器」參數給我的服務方法(最終被解析爲WHERE子句),然後在服務中添加了一些額外的標準以確保訪問限制。編輯:在這種情況下,我與Telerik Grid一起工作,它生成過濾器作爲OQL查詢 – Ozzy 2011-03-29 07:23:34
@Vincent:實現IQueryable可能是故事的一部分,但小事一樁:它允許在表示層上使用LINQ,但它沒有解決(?)如何將過濾和排序委託給DBMS的問題。 – chiccodoro 2011-03-29 15:03:57