我已经创建了一个示例项目来简化我的问题。我有这个简单的处理程序:
public class HandleThis : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest( System.Web.HttpContext context )
{
// Score.aspx just says "success"
context.Response.Redirect( "Score.aspx" );
}
public bool IsReusable { get { return true; } }
}
然后,在我的配置中,我有这个:
<httpHandlers>
<add verb="*"
path="Survey"
type="HttpHandlerTest.HandleThis, HttpHandlerTest" />
现在,当我点击http://server/Survey时,我的处理程序会被激活。
如果我将项目更改为使用IIS 6运行,则不会触发(404)。 我尝试通过以下方式在IIS中手动添加处理程序 - 网站属性 - 主目录 - 配置 - 添加(浏览到我的网站的.dll),扩展:调查,取消选中“验证文件是否存在”
我注意到IIS(如此有用)添加了“。”在我的扩展面前,所以我用“b.Survey”点击了网站;仍然是404。
当然可以在IIS 6中添加处理程序吗?
答案 0 :(得分:6)
“我尝试通过以下方式在IIS中手动添加处理程序: - 网站属性 - 主目录 - 配置 - 添加(浏览到我的网站的.dll),扩展:调查,取消选中验证文件是否存在”
听起来你正在使用错误的“可执行”路径。可执行路径应指向aspnet isapi dll,而不是包含HttpHandler实现的dll。
尝试使用.aspx扩展名映射到的相同路径(通常是:c:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll)。
答案 1 :(得分:3)
在Cassini中,一切都通过您的开发服务器,即使您尝试在集成模式下使用服务器中的编程也会引发异常。
在IIS7中,如果您以集成模式运行应用程序,它将起作用。
在IIS6中,您必须将path =“*”分配给ASPNET_ISAPI.dll,然后在web.config中使用与上面相同的引用代码,或者必须在处理程序的路径中分配扩展名。
如果您在IIS6中添加aspnet isapi *时遇到问题,请点击“无扩展名IIS6”或类似的分步教程。