2010-12-07 30 views
1

這個問題是關於ASP.NET強加給我的限制(如腳本超時等)。asp.net無限循環 - 可以這樣做嗎?

我有一個服務在ASP.NET下運行,我想創建一個對應的監視服務。

主要服務的數據位於數據庫中。
我在考慮讓監控服務在一個循環內以1秒的間隔查詢數據庫,這個循環由遠程客戶端完成的http請求發出。
現在,這個監控的實際服務將通過客戶端http請求來完成,該請求會使腳本循環(用C#編寫),當檢測到新數據時,它會將該數據聚合到該循環請求輸出緩衝區中,發送它,並退出循環,從而完成請求。
客戶將不得不發出新的請求,以保持獲得更新。

這實際上就像TCP(就像Windows IOCP一樣);您請求數據服務並等待它。當它到達時,你發出另一個請求。

我的實際問題是:你以前做過嗎?它是如何去的?我受限於IIS/ASP.NET框架強加的一些(可配置)限制嗎? 我在這種情況下有什麼限制,或者,有什麼更好的選擇,而不是太複雜的東西

請注意,我一次不會期望很多此類監控請求,可能只有幾十個。
然而,這意味着10個這樣的併發監視請求將保持10個線程繁忙,問題是;它可以傷害IIS /性能嗎? IIS將如何處理10個繁忙線程?它會發出更多?有什麼限制?這只是我能想到的極限的一個例子。

回答

1

我認爲你在這種情況下主要關心的是超時,這是非常可配置的。但我認爲這是一個錯誤的解決方案 - 您最好使用後臺服務,不斷/定期運行,並將監控數據寫入某個數據存儲,然後您的監控頁面將根據請求返回。

如果您希望您的頁面只在監控數據可用時才顯示某些內容 - 使用ajax實現 - 在頁面加載查詢監控服務上,則如果某些監控事件可用 - 如果不是,則進行渲染 - 睡眠並再次查詢。

IMO這將是一個更好的解決方案比reallu長時間運行的請求。

+0

感謝您的答覆哈桑。所以你建議爲監控服務提供一個服務? – Poni 2010-12-07 14:19:51

+0

它可能是一項服務,它可能是一個預定的控制檯應用程序 - 這是一個實施問題,但基本上 - 是的,我建議創建一個監視服務並讓ASP.NET頁面只顯示監視報告到最後用戶。這樣你就可以得到一個更清潔的架構,並且你不會受限於少量的用戶,查看監控日誌(因爲查看將是非常便宜的操作) – Hassan 2010-12-07 14:40:52

0

我認爲它不會監視使用ASP.NET服務一個很好的主意,由於以下原因...

  1. 會發生什麼事時,你的應用程序池崩潰?

  2. 如果您決定執行IISReset,該怎麼辦?首先應用哪個應用程序...主應用程序或監視應用程序?

  3. 如果監控應用程序由於負載而掛起該怎麼辦?

  4. 如果主服務上的負載已經很高,該怎麼辦?不會每1秒監控一次,增加主服務以及IIS上的負載?

你的想法...