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