2012-08-01 46 views
1

我有一個類實現IHttpModule。這是一個幫助我的應用程序抵禦DDOS攻擊的支持類。實施BeginRequest方法後,我試着調試我的代碼,出於某種原因,每次我調試類時,我都在Visual Studio中有多個線程。我不明白爲什麼,突然間,在我的本地機器上運行這個應用程序時,我得到了幾個線程,而且它只發生在這個類中。IHttpModule和線程

+0

什麼是您使用的通知「幾個線程」?我認爲這是一個Web應用程序,你有沒有在web.config中註冊IHttpModule?這是一個MVC Web應用程序(2,3?)還是一個經典的ASP.NET Web應用程序? – 2012-08-01 15:48:08

+0

當我調試沒有處理程序的Web應用程序時,我在「線程」窗口中看到7個線程。我不知道爲什麼這是你的關注... – 2012-08-01 15:49:41

+0

該應用程序是一個經典的asp.net應用程序,是的,我已經在web配置註冊它。 – 2012-08-02 06:33:38

回答

2

的可能的HttpModule攔截所有的請求到您的應用程序,其中包括文件(JS,CSS,圖像等)

看看每個請求的Request對象,並期待在Url屬性看什麼正在發生。

編輯: 的HttpModules活躍在請求流非常早,而且他們往往會得到由服務器最請求命中,所以保持代碼中的HttpModule到最低限度。例如:如果您對文件進行權限確認,請確保請求實際上正在打擊文件(即請求的網址以/ files /開頭)。只要有可能,緩存HttpModules中使用的數據,不要去HttpModule中的每個請求的數據庫!

爲什麼你的實際應用中可能獲得的命中次數較少的原因是,即使對圖像,js文件,css文件等的請求可能會在HttpModule中產生影響,但在您的應用程序中,只有請求意味着應用程序將在ASP.NET MVC中爲Web窗體和可識別的路徑創建斷點(aspx,asmx等)。

爲了得到一個看看什麼要求你在一個HTTP模塊處理,看url變量的值:

void context_BeginRequest(object sender, EventArgs e) { 
    HttpApplication app = (HttpApplication)sender; 
    String url = app.Request.Url.OriginalString; 
} 
+0

我不知道這是如何解決「多個線程」的任何方式。 – 2012-08-01 16:38:38

+0

這正是在Visual Studio中調試時的樣子,因爲VS Web服務器(或IIS Express)一次處理多個請求,所以您正在一次調試多個線程。 – 2012-08-01 16:39:35

+0

IIS或VS Web服務器有多個線程而不使用IHttpHandler,只有一個請求...是否有多個請求是無關緊要的,除非我們知道*爲什麼* OP會關注多個線程。即如果你總是有幾個線程,他的擔心是什麼? – 2012-08-01 16:42:53