Asp.net-Mvc

通過 WCF 服務實現尋呼機

  • July 27, 2018

我正在開發一個包含 WCF 服務及其 ASP.NET MVC 客戶端的應用程序。ASP.NET MVC 網站必須顯示一個對象網格——比如產品。這些產品儲存在可通過 WCF 服務訪問的數據庫中。因此,在 MVC 控制器的某個地方,我呼叫 WCF 服務的方法,該方法返回我需要顯示的產品數組。

那麼我的問題是什麼?我想為我的產品網格實現尋呼機功能,因為可能會有很多產品。所以有幾種方法可以做到這一點:

  1. 我的控制器可以獲取整個產品列表並進行記憶體分頁
  2. WCF 可以選擇所有產品並將它們儲存在其記憶體中的某個位置,然後根據請求的頁碼僅將其中的一部分傳遞給控制器。
  3. WCF 只能根據請求的頁碼從數據庫中選擇部分產品。
  4. 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();
 }
}

這對你有幫助嗎??

馬克

引用自:https://stackoverflow.com/questions/741413