簡體   English   中英

EF / WCF:減少數據傳輸

[英]EF/WCF: Reducing data transfer

希望這不是太開放。 我正在開發.NET 4, WPF, WCF, EF (STE's), SQL 2012應用程序。

我們之所以受到客戶的重擊,是因為當可用帶寬不足時,我們的應用程序超時並掛在較慢的網絡上。

我們的應用程序具有一些類似於儀表板的“實時”顯示,以及一些基於網格的數據編輯器屏幕。

使用Fiddler,我仔細查看了產品中的不同功能區域-特別關注了正在傳輸的數據量。 簡而言之,傳輸的數據太多了-我們的某些WCF調用在單個調用中檢索了100 MB以上的數據。

我認為,我們所看到的問題可以通過以下事實來表征:通過WCF和EF檢索數據時,根本沒有采取足夠的照顧,但也許我正在分析以下內容:

  • 我是可重用性的忠實擁護者,但是為什么當您需要的只是一個ID和一個選擇列表的名稱時,為什么返回一個完全水化的EF STE實體? 有時,我們只需要簡單的數據只讀顯示。 為什么要序列化ChangeTracker信息(包括OriginalValues集合等)? 也許值得將實體分成可編輯的“只讀版本”或選擇合適的列表版本?

  • 現在,我們正在使用BasicHttpBinding / XML序列化,但是有效負載似乎過大。 例如,xml包含名稱空間和許多其他噪音。 啟用IIS 7壓縮已極大地幫助了我們,但是我們還能做更多的事情嗎? JSON格式會更好地傳輸數據嗎? 雖然將XML更改為JSON似乎是重大更改。

  • 是否還有其他技術可以用來減輕有效負載大小–也許我們可以堅持使用XML序列化,但是我們只需要請求較少的數據即可。 也許使用分頁或“無限滾動”,延遲的后台加載等技術是一個不錯的選擇。

有沒有其他人面臨過大的有效載荷大小? 您是如何解決的?

謝謝!

我認為您已經涵蓋了大問題。

盡可能使用DTO而不是完整實體(簡單數據類型僅包含您需要的數據)。 您只需要一個簡單的翻譯類-您甚至可以使用代碼生成工具或類似AutoMapper的工具來幫助您。

使用NetTcpBinding而不是BasicHttpBinding-這將顯着減小消息的大小,但是您將丟失HTTP / Fiddler調試,並且將需要一些IIS配置。

或者,如果您要堅持使用HTTP並使用JSON而不是XML,則無法使用WCF BasicHttpBinding輕松實現此功能,因為它是SOAP,但是您可以換檔並嘗試使用WebAPI。 不過,這對於客戶端和服務器都是一個重大變化。

那些應該減少您的大小很多。 從那里開始,繼續探索以塊為單位引入數據,或者使用大量單個查詢而不是一個大查詢。 即使這些不會減少整體帶寬,它們也將提供更好的用戶體驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM