2010-04-01 22 views
0

我正在嘗試在global.asax中手動捕獲事件並完全跳過ASP httphandler管道。爲此,我已經設置如何阻止IIS7使用HttpHandlers?

<httpHandlers> 
    <clear/> 
</httpHandlers> 
<httpModules> 
    <clear/> 
</httpModules> 

但是當我調用服務器,我收到了YSOD

[HttpException]: No http handler was found for request type 'GET' 
    at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) 
    at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

什麼我需要做的,完全防止IIS使用傳統的管道搬運東西?我想要的只是做事件處理程序中的Response.Writes和HttpApplication.Init中設置的異步方法

編輯:我的問題是obv。有點不清楚(對於那些浪費時間的人來說很抱歉) - 我應該更好地解釋,因爲我想要做的事非常非常規。我正在嘗試查看是否可以使用IIS以類似於node.js的方式處理Web請求 - 通過將處理程序連接到HttpApplication中的異步方法。爲此,我需要ASP停止投擲搖擺,因爲我不想使用HttpHandlers。目前我最好的選擇是對所有請求使用NullHttpHandler,但我想知道是否可以完全禁用HttpHandler系統。你的想法!

回答

0

你需要IIS。請求從IIS管道開始,並且爲了處理它,IIS需要能夠找到一個http處理程序,它可以將請求傳遞給它。它只有在找到合適的處理程序後纔將請求傳遞給ASP .NET。

+0

所以我應該創建一個NullHttpHandler並且註冊所有請求類型? – mcintyre321 2010-04-01 11:32:11

+0

是的,你可以做到這一點。 – driis 2010-04-01 11:41:59

0

你必須重新添加StaticFileHandler:

<httpHandlers> 
    <clear /> 
    <add verb="*" path="*.jpg" type="System.Web.StaticFileHandler" /> 
    </httpHandlers> 
+0

或用任何替換* .jpg:在我的示例中,我處理來自數據庫的圖像,但希望/圖像中的所有圖像直接來自目錄... – bgs264 2010-04-01 11:19:12

+0

這不僅僅是讓我的所有請求都得到靜態處理嗎?我想用代碼處理它們。 – mcintyre321 2010-04-01 11:31:25

+0

是的;誤解了你的問題。 如果你想用代碼來處理它們,那麼你需要添加相關的處理程序: <新增動詞= 「*」 路徑= TYPE = 「MyImageHandler」/ 「* JPG。」> 由於您刪除了所有處理程序,所以沒有什麼可以處理您的請求,因此您會收到錯誤... 在IIS中,映射要由asp.net框架處理的文件類型.aspx,.ashx等...按照driis響應。 – bgs264 2010-04-01 11:42:04

0

我知道它有點老...但如果你在你的ie。 BeginRequestHttpApplication事件分配一個處理程序到HttpContext.Current.Handler你不應該得到這個錯誤,並且可以讓web.config中的處理程序部分爲空。