6

我创建了一个示例项目来简化我的问题。我有这个简单的处理程序:

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 中添加处理程序吗?

4

2 回答 2

6

“我尝试通过以下方式在 IIS 中手动添加处理程序: - 网站属性 - 主目录 - 配置 - 添加(浏览到我的站点的 .dll),扩展名:调查,取消选中验证文件存在”

听起来您使用了错误的“可执行”路径。可执行路径应该指向 aspnet isapi dll,而不是包含 HttpHandler 实现的 dll。

尝试使用 .aspx 扩展名映射到的相同路径(通常是:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll)。

于 2009-06-05T15:38:47.273 回答
3

在 Cassini 中,一切都通过您的开发服务器,即使如果您尝试在集成模式下使用它,服务器中的编程也会抛出异常。

如果您在集成模式下运行应用程序,它会在 IIS7 中工作。

在 IIS6 中,您要么必须将 path="*" 分配给 ASPNET_ISAPI.dll,然后在 web.config 中使用与上面相同的引用代码,要么必须在处理程序的路径中分配扩展名。

如果您在 IIS6 中将 aspnet isapi 添加为 * 时遇到问题,请在 Google 中搜索“无扩展 IIS6”或类似的分步教程。

于 2009-06-05T14:51:19.793 回答