【发布时间】:2011-07-27 10:43:05
【问题描述】:
在一个小型 ASP.NET 2.0 Web 应用程序中,我有两个 ASHX 处理程序(一个同步,一个异步)来处理 COMET 样式的消息传递。同步处理程序接收收件人和消息,而异步处理程序持有与所有客户端的“休眠”连接。
问题:我需要在共享状态下填充某种消息队列。但是,即使两个处理程序都在同一个命名空间中,我也不能在另一个中调用任何(静态或非静态)方法。我什至无法从任何处理程序访问 Global-class 中的静态方法。这一行只是给了我一个编译器错误:
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 行:
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);
}
}
}
【问题讨论】:
-
您能否向我们展示这两个类以及您感兴趣的方法的方法签名。
-
@Kev 编辑了原帖。