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

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

无法加载类型’AlarmHandler’。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.Web.HttpException:无法加载类型’AlarmHandler’。

来源错误:

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

我跟着几个教程,但我想我错过了一些小东西。 我正在使用以下配置:

  • 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(""); Response.Write(""); Response.Write("

Hello from a synchronous custom HTTP handler.

"); Response.Write(""); Response.Write(""); } public bool IsReusable { get { return false; } } }

alarms.ashx

  

web.config

        

对我有用的是改变:

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

至:

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

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(""); Response.Write(""); Response.Write("

Hello from a synchronous custom HTTP handler.

"); Response.Write(""); Response.Write(""); } public bool IsReusable { get { return false; } } }

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

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