您的位置:首页 > 理论基础 > 计算机网络

IHttpHandler、WebClient、HttpWebRequest的异步模式

2011-04-14 08:56 459 查看
IHttpHandler的异步接口是IHttpAsyncHandler

使用示例:

public class Handler1 : IHttpAsyncHandler
{

byte[] buffer = new byte[1024];
FileStream fs;
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
fs = new FileStream(@"c:/txt.txt", FileMode.Open, FileAccess.Read);

return fs.BeginRead(buffer, 0, buffer.Length, cb,context);
}

public void EndProcessRequest(IAsyncResult result)
{
int len = fs.EndRead(result);
string str = Encoding.UTF8.GetString(buffer, 0, len);
HttpContext context = result.AsyncState as HttpContext;

using (StreamReader sr=new StreamReader(context.Request.InputStream))
{
str += sr.ReadToEnd();
}
context.Response.Write(str);
}

public bool IsReusable
{
get { return false; }
}

public void ProcessRequest(HttpContext context)
{
throw new NotImplementedException();
}
}


WebClient的异步使用:

private void DoWebClient()
{
WebClient webClient = new WebClient();
//webClient.OpenReadAsync(new Uri("http://localhost:13701/Handler1.ashx"));//在不阻止调用线程的情况下,从资源返回数据
//webClient.OpenReadCompleted += new OpenReadCompletedEventHandler((o, e) => {
//    using (StreamReader reader = new StreamReader(e.Result))
//    {
//        string contents = reader.ReadToEnd();
//         Trace.Write(contents);

//    }
//});//异步操作完成时发生

webClient.UploadDataAsync(new Uri("http://localhost:13701/Handler1.ashx"), "POST", Encoding.UTF8.GetBytes(":majiang"));
webClient.UploadDataCompleted += new UploadDataCompletedEventHandler((o, e) =>
{
string contents = Encoding.UTF8.GetString(e.Result);
Trace.Write(contents);
});
}


HttpWebRequest的异步使用

private void DoHttpWebRequest()
{
string url = "http://localhost:13701/Handler1.ashx";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);//创建WebRequest类
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(RequestProcess, request);

}
void RequestProcess(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
using (Stream stream = request.EndGetRequestStream(asyncResult))
using (StreamWriter sw = new StreamWriter(stream))
{
sw.Write(":Majiang");
}
request.BeginGetResponse(ResponseProcess, request);

}
void ResponseProcess(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
HttpWebResponse response = request.EndGetResponse(asyncResult) as HttpWebResponse;
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string contents = reader.ReadToEnd();
Trace.Write(contents);

}
}
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: