2010-04-01 57 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中的处理程序部分为空。