2010-01-18 14 views
1

我在某些ASP.NET頁面的後端調用RESTful Web服務。HttpWebRequest後的StreamReader ReadToEnd()EndGetResponse() - 最具擴展性?

我使用ASP.NET異步頁面,因此在引擎蓋下我使用的方法:

HttpWebRequest的BeginGetResponse()

HttpWebRequest的EndGetResponse()

將R esponse字符串在我的情況下總是一個JSON字符串。我用下面的代碼來讀取整個字符串:

using (StreamReader sr = new StreamReader(myHttpWebResponse.GetResponseStream())) 
{ 
    myObject.JSONData = sr.ReadToEnd(); 
} 

這種方法在可伸縮性方面是否可行?我看過其他代碼示例,它們使用Read()以塊的形式檢索響應數據。我的主要目標是可擴展性,因此可以跨多個併發頁面點擊進行後端調用。

感謝, 弗蘭克

回答

0

這取決於你的意思是 「可擴展性」 的東西。如果你正在談論能夠處理越來越大的文件,我會說它不是非常可擴展的。由於您使用的是單個ReadToEnd,因此巨大的流將需要將整個流讀入內存,然後才能執行操作。隨着應用程序流在數量,複雜性和規模上的增長,您將發現這將開始妨礙服務器處理請求的性能。您也可能會發現,您的應用程序池將在您的請求期間開始自行回收(如果您最終獲得了大量虛擬內存)。

如果數據流總是會短小你只關心創建流的數量,我不明白爲什麼這不會,只要你的數據流都依賴於打開的文件,數據庫連接擴展等

+0

處理大文件是不是一個問題 - 在JSON響應一般都在1-10千字節的範圍內。 我指的是它可以處理多個併發請求的意義上的可伸縮性。 – frankadelic 2010-01-18 23:50:18

+0

我想說,保持你的流獨立於任何資源霸佔分配代碼 - 基本上任何輔助流或連接對象,它應該與您的應用程序池一起擴展。它會歸結爲CPU /內存/網絡功能。保持代碼的適當範圍(如你的小例子)應該允許異步地進行大量的同時連接。 – 2010-01-19 01:53:59

+0

您是否將HTTP請求從您的ASPX應用程序發送到相同的後端服務器?如果是這樣,您需要提高WebRequest設置中的最大連接限制。否則,即使您的IIS服務器正在爲大量客戶端提供服務,頁面也會受到可用於HTTPWebRequest的傳出連接數量的限制。 可以設置的限制如下: ServicePointManager.DefaultConnectionLimit = 100; //例如; – feroze 2010-01-23 18:56:51

相關問題