2013-05-28 30 views
0

希望這不是太開放。我正在研究.NET 4, WPF, WCF, EF (STE's), SQL 2012應用程序。EF/WCF:減少數據傳輸

我們越來越受到我們客戶的打擊,因爲我們的應用超時並且在沒有太多可用帶寬的情況下掛在較慢的網絡上。

我們的應用程序有幾個「實時」儀表板式顯示器以及幾個基於網格的數據編輯器屏幕。

使用招,我接過仔細看看產品中的不同功能區域 - 特別側重於真實傳輸的數據量。總之,傳輸的數據太多 - 我們的一些WCF調用在一次調用中檢索到超過100 MB的數據。

我相信,我們看到可以通過的事實,有這根本就不是通過檢索WCF和EF數據時採取足夠的照顧來表徵的問題,但也許我是在分析事情:

  • 我我是一個可重用性的狂熱粉絲,但爲什麼當你需要的只是一個id和一個picklist的名字時,爲什麼會返回一個完全水合的EF STE實體呢?有時,我們只需要一個簡單的只讀數據顯示。爲什麼 序列化ChangeTracker信息,包括OriginalValues 集合等?也許,有必要將實體拆分爲 可編輯和「只讀版本」或選取適當的版本?

  • 現在,我們使用BasicHttpBinding/XML序列化,但負載看起來很臃腫。例如,xml包含命名空間和其他一些噪音。啓用IIS 7壓縮有助於大幅度提高 ,但我們可以做更多嗎?對於傳輸數據,JSON格式會更好嗎?雖然將XML更改爲JSON似乎是 重大更改。

  • 是否有任何其他技術可以用來減輕有效載荷大小 - 也許我們可以堅持使用XML序列化,但我們 只需要請求較少的數據。也許使用諸如分頁 或「無限滾動」,延遲背景加載等技術將會是一個不錯的選擇。

有沒有其他人遇到過無法接受的有效載荷大小?你做了什麼來解決它?

謝謝!

+0

如果您要求EF返回一個對象集合,那麼即使您只需要該ID,它也會這樣做。 – Paparazzi

+0

是的。但我們不一定需要序列化完整的對象以提供給客戶端。在這些情況下,使用Id和Name轉換爲簡單的只讀DTO會減輕負載。 –

+0

沒錯。如果你不需要整個對象,那麼不要求整個對象。 – Paparazzi

回答

1

我想你已經覆蓋了大的。

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

使用NetTcpBinding的,而不是basicHttpBinding的 - 那會顯著減少消息的大小,但你會失去HTTP /提琴手調試,這將需要一些IIS配置。

或者如果你想堅持使用HTTP並使用JSON而不是XML,那麼使用WCF BasicHttpBinding將無法輕鬆完成,因爲這是SOAP,但是你可以轉換並嘗試使用WebAPI。這對客戶端和服務器來說都是一個重大的改變。

那些應該減少你的尺寸相當多。從那裏開始,繼續探索引入數據塊,或者使用大量的單個查詢,而不是一個大的查詢。即使這些不會降低整體帶寬,它們也會提供更好的用戶體驗。

+0

感謝您的快速反應和洞察力。 –