2011-07-04 72 views
3

我們正在構建Web服務並預計可能會有大量數據被返回。大型結果的Web服務

ASP.Net和IIS 6如何處理這個問題?我們可以做些什麼來減少資源密集度?

例如,我們目前有一個可序列化的類,它的屬性是另一個可序列化類類型的數組。當Web服務被調用時,它從數據庫查詢一大組記錄,實例化類,填充數組屬性,然後返回被序列化的類。

這是如何得到處理的引擎蓋下?我想整個DataSet對象都存儲在內存中,然後整個可序列化對象存儲在成員中,然後序列化,整個XML存儲在內存中,最後流向調用者。

我可以做些什麼來減少內存消耗,例如從數據庫讀取結果時流出結果?這可能嗎?

+0

在IIS上託管的舊式Web服務或WCF服務? –

+0

老式的Web服務。 – Jeremy

+0

@Jeremy:答案是,「不要使用舊式Web服務進行新的開發」。 –

回答

1

我不確定簡單地交換使用WCF是答案,因爲問題實際上是關於請求數據的負載。

有幾件事情選擇您喜歡的服務方法之前,要考慮偶數:

可以緩存的數據?如果可以將數據存儲在內存中,則每次請求數據時都會阻止繪製數據。但是,如果數據的大小過大,則可以考慮將數據從數據庫寫入文件並從那裏提供。

你可以考慮像Redis一樣的虛擬機模式。這將允許您緩存數據,但如果不經常訪問數據,則可以將數據寫入文件以防止過度使用內存。

有什麼辦法,對數據庫的調用可以分成幾個更有效的調用?

如果執行通話所用的時間很長,您可以考慮異步調用數據。

最後,數據作爲web服務提供服務至關重要嗎?數據可以作爲XML文檔提供嗎?

+0

WCF將解決這個問題,首先不會一次在內存中創建消息的四個副本;其次,如果可行,WCF服務可以使用TCP/IP和二進制代替HTTP和SOAP;第三,如果有必要,WCF可以做真正的流媒體。 –

+0

@John - 如果調用應用程序僅支持傳統Web服務模型,WCF可以實現真正的流式傳輸嗎? – Jeremy

+0

@John:我同意WCF是優越的,可能是合適的服務,但正如我所說的,在選擇服務之前,應該考慮其他事情。 – Digbyswift