2011-04-17 17 views
1

我正在使用System.Net.WebClient().DownloadFile()下載Web服務對文件的響應。響應相當大,所以我不使用直接的SOAP調用,它會返回單個字符串,消耗太多內存。 web服務的響應是XML,我得到的回覆是像如何使用System.Net.WebClient()從正確編碼標籤的web服務下載XML?

<?xml version="1.0" encoding="utf-8?> 
<string xmlns="MyAPI> 
&lt;object name="First object"&gt; 
... 

所以這個問題是整個響應被包裹成一個「字符串」屬性和真正的XML內容被編碼。 如果不重新讀取整個保存的文件並將所有內容都轉換回來,我如何才能以原始正確的格式獲取響應?

回答

1

我不知道你爲什麼認爲Web服務調用會佔用太多的內存。你嘗試過WCF嗎?

您的問題是您以錯誤的方式調用服務。您毫無疑問使用GET HTTP請求。

如果你堅持不使用服務引用,那麼我建議你使用WebRequest,並通過GetResultStream()方法讀取結果。您甚至可以將結果作爲XML處理,方法是將該流傳遞到XmlReader.Create(Stream)中,該XmlReader.Create(Stream)將返回一個XmlReader對象,該對象可用於讀取數據而不必將其全部讀入內存。

+0

由於使用SOAP和服務引用,它佔用了太多的內存,我返回了具有800萬字符的_one_字符串對象。我在嵌入式設備(iPhone)上運行,並且在那裏分配800萬字符的字符串(= 16MB,unicode的b/c)可能會導致問題。不幸的是WCF不是一種選擇,但我將在未來的版本中使用它。目前,我正在使用WebClient() - WebRequest只是一種工作。兩者都返回相同的結果:標籤被編碼,所以回到我的問題。 :-) – Krumelur 2011-04-17 17:05:00

+0

請發佈服務的簽名。它會返回一個「字符串」嗎?它是您創建的服務嗎? – 2011-04-17 22:01:29

+0

是的,由我創建。是的,它返回一個字符串。 – Krumelur 2011-04-18 05:38:12