2012-02-03 18 views
0

我有一個WCF Windows服務,它通過壓縮數據集向250多個PDA提供數據,並且希望重新開發服務和移動應用程序以使用實體框架4.x模型。實體框架數據壓縮

爲了保持在PDA上發送/接收數據時可接受的性能,我需要保持數據大小盡可能小,並且想知道是否可以從WCF窗口服務壓縮IEnumerable?

根據之前對數據集的經驗,我獲得了80%以上的壓縮率,甚至在PDA上解壓縮數據,實現了50%的性能彙總,因此保持相似的性能水平至關重要。

編輯: 我可以使用二進制串行器,然後壓縮流嗎? As shown here

+1

爲什麼不使用瀏覽器和IIS支持的GZip壓縮?這樣你就不必在你的應用程序中做任何事情。 – Steven 2012-02-03 12:08:52

+0

我可以使用這個,如果我要在IIS內託管WCF服務,但希望保留一個Windows服務。 – 2012-02-03 12:19:43

回答

5

如果您不能使用內置的IIS GZip功能,那麼您可以隨時手動執行

public static byte[] Compress(this IEnumerable<T> list) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     using (var zip = new GZipStream(stream, CompressionMode.Compress, true)) 
     { 
      var formatter = new BinaryFormatter(); 
      formatter.Serialize(zip, list); 
     } 
     return stream.ToArray(); 
    } 
} 

然後,只需有你的WCF方法返回一個字節數組,然後你就可以在客戶端解壓&反序列化。

上面的代碼是一個擴展方法,所以你可以基本上只需撥打return myList.Compress()