IHttpHandler、WebClient、HttpWebRequest的异步模式
2011-04-14 08:56
459 查看
IHttpHandler的异步接口是IHttpAsyncHandler
使用示例:
WebClient的异步使用:
HttpWebRequest的异步使用
使用示例:
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); } }
相关文章推荐
- XMLHttpRequest+WebForm模式(接口IHttpHandler)实现ajax
- 用HttpWebRequest代替WebClient解决POST超时问题
- 使用WebClient或HttpWebRequest模拟上传文件和数据
- 解决WebClient或HttpWebRequest首次连接缓慢问题
- webrequest、httpwebrequest、webclient、HttpClient 四个类的区别?
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- 用HttpWebRequest代替WebClient解决POST超时问题
- HttpWebRequest post 提交 C#的WebBrowser操作frame如此简单 WebClient 提交
- HttpWebRequest 的一个 异步封装
- RegisterStartupScrip,webclient,httpwebrequest和httpwebresponse,IsAuthenticated, XMLHttpRequest,Micros
- httpwebrequest异步参考
- 解决WebClient或HttpWebRequest首次连接缓慢问题
- httpWebRequest获取流和WebClient的文件抓取
- WebClient和HttpWebRequest的简单用法
- [解决WebClient或HttpWebRequest首次连接缓慢问题]
- 终止 WebClient 和HttpWebRequest
- 异步模型中HttpWebRequest的Timeout
- 解决WebClient或HttpWebRequest首次连接缓慢问题
- Http异步发送之HttpWebRequest的BeginGetResponse
- Silverlight用WebClient and HttpWebRequest两种方式来调用WebService