2010-02-01 51 views
2

我發送一個XMLDocument到我的webservice(.asmx),當我通過xmldocument.outerxml.tostring()檢查該xmldocumetn的文件大小時,它是來到433434(我不知道什麼它代表...它是以字節爲單位) 所以我想壓縮這個數據從客戶端,並將其發送到webservice,而不是在我的本地硬盤上保存爲XML文件.. 任何人都可以在這個... 在此先感謝壓縮數據發送到Webservice

回答

0

xmldocument.OuterXml.ToString().Length將返回xml字符串的長度,就像"something".Length將返回9.所以不,它不是以字節爲單位。

字節的實際大小將取決於你的編碼,爲例,你可以使用:

System.Text.ASCIIEncoding.Unicode.GetByteCount(s); 
System.Text.ASCIIEncoding.ASCII.GetByteCount(s); 
... 

根據所使用的編碼。

EDIT1: 數據量是否顯着?假設你通過網絡發送它,你有很多選擇來在發送之前壓縮數據。

您可以使用自己的自定義編碼來儘可能減少發送的數據,比如說將常量節點名稱索引爲「a」,「b」...並在之後發送地圖。您也可以嘗試以塊的形式發送它。

如果文件大小是因爲超時的問題,我建議尋找到webservice.timeout財產On MSDN

+0

如何在發送到webservice之前壓縮數據? – Sathish 2010-02-01 04:10:02

0

在壓縮之前和之後做一些基準測試。您可能會發現,在管道兩端的壓縮/解壓縮比通過從有效負載中剔除一些字節所節省的時間要多得多。你需要找到壓縮的最佳位置,比開銷節省更多的時間(1/2 MB,特別是在局域網上,流量不是很大,除非你真的抽出這些XML文檔)。

0

我以前對.NET壓縮庫有一些不好的經驗,所以我推薦SharpZipLib。你需要改變你的web方法實現來接受byte[];

您也可以使用TCP綁定作爲WCF服務訪問該服務,因此它將消耗更少的帶寬。在與您的Web方法簽名混淆之前,您應該考慮此選項。