ASP.两个ASHX处理程序之间的通信

本文关键字:之间 通信 程序 处理 两个 ASHX ASP | 更新日期: 2023-09-27 18:03:54

. NET 2.0 web应用程序中,我有两个ASHX处理程序(一个同步,一个异步)来处理COMET样式的消息传递。同步处理程序接受一个收件人和一条消息,而异步处理程序持有与所有客户端的"休眠"连接。

问题:我需要在共享状态下填充某种消息队列。然而,即使两个处理程序都在同一个名称空间中,我也不能调用另一个处理程序中的任何(静态或非静态)方法。我甚至不能从任何处理程序访问全局类中的静态方法。这一行只是给了我一个编译错误:

Global.SendMessage(recipient, context.Request["message"]);

编译器错误消息:CS0103:名称"Global"在当前上下文中不存在

我不太确定我在哪个上下文中。

处理程序直接写入.ashx文件,如下所示:
<%@ WebHandler Language="C#" Class="MyApp.MessageHandler" %>
using System;
using System.Web;
namespace MyApp
{
    public class MessageHandler : IHttpHandler

提示吗?

编辑:

如建议的那样,我将类放在一个代码隐藏文件中,因此ashx文件中的标记如下所示:
<%@ WebHandler Language="C#" Class="MyApp.MessageHandler" CodeBehind="MessageHandler.ashx.cs" %>

文件后面的代码呈现,具有相同的名称。然而,这也给了我一个错误:

解析器错误消息:无法创建类型"MyApp.MessageHandler"。源错误:第1行:<%@ WebHandler语言=" c# " Class="MyApp. php "MessageHandler"后台代码= " MessageHandler.ashx.cs " %>

MessageHandler类:

using System;
using System.Web;
namespace MyApp
{
    public class MessageHandler : IHttpHandler
    {
        /*public MessageHandler()
        {
        }
        */
        #region IHttpHandler Members
        public bool IsReusable
        {
            get { return true; }
        }
        //Called to induce new message from external
        public void ProcessRequest(HttpContext context)
        {
            string recipient = context.Request["recipient"];
            context.Response.Write(recipient);
            if (recipient == "all" || string.IsNullOrEmpty(recipient))
            {
                Global.BroadcastMessage(context.Request["message"]);
            }
            else
            {
                Global.SendMessage(recipient, context.Request["message"]);
            }
        }
        #endregion
    }
}

Global类中的一个示例方法:

  public static void SendMessage(string recipient, string message)
    {
        Client client;
        if (clients.ContainsKey(recipient))
        {
            if (clients.TryGetValue(recipient, out client))
            {
                client.Message = message;
                client.SetCompleted(true);
            }
        }
    }

ASP.两个ASHX处理程序之间的通信

如果你写你的代码在文件后面的代码为ashx然后你可以调用静态/非静态方法的处理程序,因为代码得到编译时,你构建项目,其中在ashx文件中的代码得到编译时,处理程序收到请求,因此它不能在正常的项目构建过程中被调用,因为它还不能编译