实例1 : 在异步handler中异步访问网络 并返回结果
public class Demo1 : IHttpAsyncHandler
{
#region IHttpAsyncHandler Members
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
context.Response.Write("begin");
var request = (HttpWebRequest)WebRequest.Create("http://www.baidu.com");
return request.BeginGetResponse(ar =>
{
var response = request.EndGetResponse(ar);
byte[] data = new byte[response.ContentLength];
response.GetResponseStream().Read(data, 0, data.Length);
response.Close();
context.Response.Write(Encoding.Default.GetString(data));
cb(ar); //通知asp.net异步请求已完成
}, context);
}
public void EndProcessRequest(IAsyncResult result)
{
var context = (HttpContext)result.AsyncState; //获取我们在BeginGetResponse中传入的HttpContext
context.Response.Write("end");
}
#endregion
#region IHttpHandler Members
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
}
#endregion
}
{
#region IHttpAsyncHandler Members
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
context.Response.Write("begin");
var request = (HttpWebRequest)WebRequest.Create("http://www.baidu.com");
return request.BeginGetResponse(ar =>
{
var response = request.EndGetResponse(ar);
byte[] data = new byte[response.ContentLength];
response.GetResponseStream().Read(data, 0, data.Length);
response.Close();
context.Response.Write(Encoding.Default.GetString(data));
cb(ar); //通知asp.net异步请求已完成
}, context);
}
public void EndProcessRequest(IAsyncResult result)
{
var context = (HttpContext)result.AsyncState; //获取我们在BeginGetResponse中传入的HttpContext
context.Response.Write("end");
}
#endregion
#region IHttpHandler Members
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
}
#endregion
}