Asp.net-Mvc
通過 WCF 服務實現尋呼機
我正在開發一個包含 WCF 服務及其 ASP.NET MVC 客戶端的應用程序。ASP.NET MVC 網站必須顯示一個對象網格——比如產品。這些產品儲存在可通過 WCF 服務訪問的數據庫中。因此,在 MVC 控制器的某個地方,我呼叫 WCF 服務的方法,該方法返回我需要顯示的產品數組。
那麼我的問題是什麼?我想為我的產品網格實現尋呼機功能,因為可能會有很多產品。所以有幾種方法可以做到這一點:
- 我的控制器可以獲取整個產品列表並進行記憶體分頁
- WCF 可以選擇所有產品並將它們儲存在其記憶體中的某個位置,然後根據請求的頁碼僅將其中的一部分傳遞給控制器。
- WCF 只能根據請求的頁碼從數據庫中選擇部分產品。
- WCF可以將IQueryable返回給控制器,然後控制器會隨時選擇他想要的任何東西。
據我了解(如果不正確,請糾正我),第一個選項是無用的,所以我必須在其他選項之間進行選擇。
第二個選項浪費了我伺服器的記憶體。
第三個選項還可以,但是在WCF端實現分頁似乎有點難看。
第四個選項聽起來令人困惑。我實際上將某種查詢傳遞給客戶端,然後他自己通過 WCF 服務查詢我的數據庫。我不知道如何正確實現這一點。
那麼你能幫我選擇正確的方法來實現它嗎?
您的後端數據庫層是什麼樣的?如果您使用 LINQ(-to-SQL 或 -to-Entities),則可以通過指定頁面大小和所需頁碼來通過 WCF 實現分頁,然後使用 LINQ 的“Skip”和“Take”運算符來獲取請求的頁面 - 大致類似於:
[ServiceContract] public interface IFetchData { [OperationContract] public List<Data> GetData(int pageSize, int pageNumber) }然後像這樣實現它(簡化):
public class FetchDataService : IFetchData { public List<Data> GetData(int pageSize, int pageNumber) { var query = yourContext.DataTable .Skip((pageNumber - 1) * pageSize) .Take(pageSize); return query.ToList(); } }這對你有幫助嗎??
馬克