2009-07-07 121 views
3

我有一個「簡單」任務。我有一個使用C#編寫的Web服務的現有項目,該項目有一個將大量XML文件發送到客戶端的方法。 (這是存儲在服務器上的數據的備份文件,需要在其他地方發送。)此服務還設置了一些額外的認證/授權。 我有一個WIN32的現有Delphi 2007應用程序,它調用Web服務來提取XML數據以供進一步處理。這是一個遺留系統,無需.NET安裝即可運行。 唯一的問題:XML文件是巨大的(至少5 MB),需要作爲一個整體發送。由於系統要求,我不能把它分成多個部分。我不允許對C#或Delphi代碼進行重大更改。 (我只能改變客戶端和服務器上的方法調用。)我不允許花費超過8(工作)小時來提出更好的解決方案,否則事情將保持不變。通過SOAP發送二進制流

我想添加的修改是壓縮XML數據(將其減少到大約100 KB),然後將其作爲二進制流發送到客戶端。然後,Delphi代碼應該接受此傳入流並再次解壓縮XML數據。現在,對現有代碼進行最小限度的更改,應如何完成? (是的,我過去曾寫過原始的客戶端和服務器,但從來不打算一次發送那麼多的數據,不幸的是,從我手中接過來的開發人員有其他想法,做出了一些愚蠢的改變,做了更多的傷害,並且在我的鋼管引導可以連接到他的背後之前離開公司,所以現在我需要修復一些東西。修復此Web服務與其他需要恢復的傷害相比,具有非常低的優先級。)


服務器代碼基於傳統的ASMX東西,客戶端代碼是Delphi SOAP導入的結果,並帶有一些額外的修改。 XML是3000+用戶的每日更新,這在當前的設計中恰好是巨大的。我們正在努力,但這需要時間。還有更重要的項目需要先解決,但正如我所說的,有很短的時間可以快速解決這個問題。

+0

您還沒有說過是否使用WCF或傳統的ASMX技術。 – 2009-07-07 13:46:52

+0

爲什麼不備份備份服務器文件的其餘部分時XML文件?爲什麼要特別對待它?你*是*備份服務器,不是嗎? – 2009-07-07 15:07:36

回答

4

這聽起來像一個很好的候選人一個HttpHandler

我的好鏈接是我的工作電腦上(我來補充他們當我開始工作),但你可以看看,看看它是否將是一個很好適合。

- 編輯 -
這裏是鏈接...

http://www.ddj.com/windows/184416694
http://visualstudiomagazine.com/articles/2006/08/01/create-dedicated-service-handlers.aspx?sc_lang=en&sc_mode=edit

+0

聽起來不錯,只要它很快實施。 :-)否則,我不會有時間進行修改。 (首先需要解決的問題太多了。) – 2009-07-07 11:59:28

+0

現在我需要的僅僅是客戶端處理這個流的東西。 (並希望在Delphi/WIN32中很容易實現。) – 2009-07-08 07:56:31

1

什麼是SOAP消息一個5MB的文件的問題?我寫了一個運行在soap上的文檔服務器,這個服務器對大文件沒有問題。

如果大小對您來說是個問題,我只會壓縮​​和解壓縮xml數據。這可以通過許多(免費的)可用組件之一來輕鬆完成,用於壓縮TStream後代。

0

如果你得到了這樣的壓縮,只是將每個字節轉換爲它的十六進制等價值,這隻會使尺寸加倍,然後發送它。然後在另一端做相反的事情。或者我錯過了什麼?

0

我同意布拉德布魯斯,HttpHandler會很快,使用GZIP或Deflate Compression與我可能是錯誤的......瀏覽器本地支持。您可以輕鬆地在基於文本的數據上獲得便宜的CPU時間壓縮。

System.IO.Compression.GZipStream GZipStream = new System.IO.Compression.GZipStream("Your XML Doc Stream",System.IO.Compression.CompressionMode.Compress) 
相關問題