对我有用的是改变:
<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>
To:
<% @ WebHandler language="C#" class="Namespace.AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>
Where Namespace
是其中的命名空间AlarmHandler
被宣布。
考虑到这一点,我认为将处理程序注册更改为此可能是一个好主意:
<add name="AlarmHandler" path="*.ashx" verb="*" type="Namespace.AlarmHandler" />
顺便说一句,我在很多场合使用过 HTTP 处理程序,但从来没有费心去注册它们(在我的例子中,我倾向于通过 Ajax 显式调用它们),因此这一行甚至可能没有必要。
Edit:
在这种情况下,您没有使用 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,这可能会解释您遇到的一些困难。