本来是想学习下IHttpAsyncHandler接口的,然后就打开VS2008,快速点击“文件”-->“新建”-->"网站",然后新建一个CometSQL的网站,再在网站下面新建三个类:ProcessAsyncHandler.cs、ProcessAsyncResult.cs、ProcesssMessageHandler.cs,这三个类分别继承自IHttpAsyncHandler、IAsyncResult以及IHttpHandler。本来搞到这儿貌似一切没问题,可是下面调试的时候,麻烦来了,我在ProcessAsyncHandler类中敲入以下代码:
public class ProcessAsyncHandler : IHttpAsyncHandler
{
public static List<ProcessAsyncResult> Queue;
static ProcessAsyncHandler()
{
Queue = new List<ProcessAsyncResult>();
}
#region IHttpAsyncHandler 成员
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
var sessionID = context.Request["sessionId"];
if (Queue.Find(q => q.SessionId == sessionID) != null)
{
var index = Queue.IndexOf(Queue.Find(q => q.SessionId == sessionID));
Queue[index].Context = context;
Queue[index].Callback = cb;
return Queue[index];
}
var asyncResult = new ProcessAsyncResult(context, cb, sessionID);
Queue.Add(asyncResult);
return asyncResult;
}
public void EndProcessRequest(IAsyncResult result)
{
var rslt = (ProcessAsyncResult)result;
rslt.Context.Response.Write(rslt.Message);
rslt.Message = string.Empty;
}
#endregion
#region IHttpHandler 成员
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
throw new NotImplementedException();
}
#endregion
}
没想到在我的界面显示如下:
但是我按F5运行的时候,程序仍然能够运行,只是不能击中断点。
如果说这还需要在web.config中配置的话,那么我利用如下节点来配置:
<add verb="GET,POST" path="ProcessMessageHandler.cs" type="MyComet.MyMessageHandler,MyComet" validate="false"/>
始终不正确,一直提示找不到文件。这就怪了......................
其实,发生这种事情的原因,就是因为这三个类没有在同一个程序集下面,解决的方法很简单,就是创建项目的时候,选择“文件”-->“新建”-->"项目",在弹出的对话框中选择“Asp.net web 应用程序”即可。