IIS 7.5无法使用代码隐藏文件加载自定义HTTP处理程序

时间:2012-11-12 08:49:52

标签: c# asp-classic iis-7.5

在过去的两天里,我试图让我的自定义HTTP处理程序工作, 但没有结果。我收到以下错误:

  

无法加载类型'AlarmHandler'。   描述:未处理   在执行当前Web请求期间发生异常。   请查看堆栈跟踪以获取有关错误的更多信息   它起源于代码。

     

异常详细信息:System.Web.HttpException:无法加载类型   'AlarmHandler'。

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

我遵循了几个教程,但我想我错过了一些小事。 我正在使用以下配置:

  • IIS 7.5
  • DefaultPool设置为集成模式
  • 所有文件都在根目录(C:\ inetpub \ wwwroot)
  • 在IIS7.5中定义的处理程序映射
  • 网络项目

AlarmHandler.ashx.cs

using System.Web;
public class AlarmHandler : IHttpHandler
{
    // Constructor.
    public AlarmHandler() { }


    public void ProcessRequest(HttpContext context)
    {
        HttpRequest Request = context.Request;
        HttpResponse Response = context.Response;

        // Test code.
        Response.Write("<html>");
        Response.Write("<body>");
        Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
        Response.Write("</body>");
        Response.Write("</html>");
    }


    public bool IsReusable
    {
        get { return false; }
    }
}

alarms.ashx

<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>

的web.config

<configuration>
    <system.webServer>
        <handlers>
            <add name="AlarmHandler" path="*.ashx" verb="*" type="IHttpHandler" />
        </handlers>
    </system.webServer>
</configuration>

2 个答案:

答案 0 :(得分:3)

对我有用的是改变:

<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>

要:

<% @ WebHandler language="C#" class="Namespace.AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>

Namespace是声明AlarmHandler的名称空间。

考虑到这一点,我认为将处理程序注册更改为此可能是一个好主意:

<add name="AlarmHandler" path="*.ashx" verb="*" type="Namespace.AlarmHandler" />

顺便说一句,我在很多场合都使用过HTTP处理程序而且从来没有费心去注册它们(在我的情况下我倾向于通过Ajax显式地调用它们),所以这行甚至可能都不是必需的。

修改

在这种情况下,你没有使用Visual Studio,因为你没有bin目录会让事情变得有点不同,所以我们必须对处理程序做一些不同的事情。

目前,您的处理程序分为ASHX和CS文件。这通常没问题,但在你的情况下我们需要将它们结合起来。

这应该是您的Alarms.ashx文件的内容(您不再需要AlarmHandler.ashx.cs文件):

<% @ WebHandler language="C#" class="AlarmHandler" %>

using System.Web;

public class AlarmHandler : IHttpHandler
{
    // Constructor.
    public AlarmHandler() { }

    public void ProcessRequest(HttpContext context)
    {
        HttpRequest Request = context.Request;
        HttpResponse Response = context.Response;

        // Test code.
        Response.Write("<html>");
        Response.Write("<body>");
        Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
        Response.Write("</body>");
        Response.Write("</html>");
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

顺便说一句,您一直关注的教程几乎肯定会假设您使用的是Visual Studio,这可能会解释您遇到的一些难题。

答案 1 :(得分:2)

仅仅是因为Google搜索了关于httphandlers和代码隐藏文件的问题:您需要做的就是将.cs文件放在App_Code文件夹中,然后从.ashx文件中引用该类。