2010-06-24 49 views
1

我正在嘗試爲我寫的Web服務服務器編寫負載測試客戶端。客戶端使用HTTP與服務器交互。當有多個保持活動請求時HttpWebRequest停止

我的服務的常規客戶端應該使用HTTP保持活動狀態(通過使用HTTP 1.1,而不是在HttpWebRequest中將KeepAlive值設置爲false),以便它們的TCP連接保持爲以後的HTTP請求。每個客戶端在開始進行身份驗證時都會執行同步請求/響應,然後轉到異步請求。

在我的負載測試中,我想讓數百個模擬客戶端都向同一臺服務器發送請求。但是,如果我沒有在我的HttpWebRequests中將KeepAlive設置爲false,那麼所有模擬客戶端顯然會嘗試並使用同一個TCP連接,並且在我的負載測試中得到停頓,因爲他們會慢慢嘗試共享連接以執行其初始同步要求。我不相信使異步的第一個請求會解決這個問題,我已經嘗試過,並且在BeginGetResponse()調用中獲得了相同的停頓(應該立即返回,但不會),因爲它正在等待進入我認爲共享連接。

有什麼方法可以確保我的負載測試中的每個「客戶端」都獲得他們自己的TCP連接,並將其用於未來的HttpWebRequests?

有人也有類似的問題在這裏: HttpWebRequest timeout in 3.5sp1他們使用的KeepAlive =虛假的解決,但是這還不夠好,我因爲這個服務器都將有一個巨大的量,我想保持網絡的數據傳輸降到最低。

回答

0

連接限制可能因底層操作系統/主機環境而異。可以通過將HttpWebRequest.ServicePoint.ConnectionLimit設置爲更高的值或.NET的.config文件之一以編程方式進行更改

+0

建議客戶端應用程序一次不應使用多於2個持久連接(http: //www.faqs.org/rfcs/rfc2616.html) – Tinku 2010-06-24 20:49:17

+0

連接限制並不重要,我沒有打它。問題是相同的TCP連接反覆重複使用,並且我無法控制特定HTTP請求使用哪個TCP連接。我懷疑這是不可能的,我只是嘗試使用單獨的過程。 – evilfred 2010-06-24 20:49:34

+0

嘗試與.net 1.1編譯這是2.0的問題 – Tinku 2010-06-24 20:58:33