web请求
RssAsync.aspx

    //这是调用本网站的两个页面,也可以设置成外部网站页面
    const string rssFeed1 = "http://localhost:2289/AsnicTest/WebRequest1.aspx";
    
const string rssFeed2 = "http://localhost:2289/AsnicTest/WebRequest2.aspx";

    AsyncReader rss1, rss2;

    
protected void Page_Load(object sender, EventArgs e)
    {
        PreRenderComplete 
+= new EventHandler(RssAsync_PreRenderComplete);

        rss1 
= new AsyncReader(rssFeed1);
        rss2 
= new AsyncReader(rssFeed2);

        PageAsyncTask task1 
= new PageAsyncTask(new BeginEventHandler(rss1.BeginRead), new EndEventHandler(rss1.EndRead), nullnulltrue);
        PageAsyncTask task2 
= new PageAsyncTask(new BeginEventHandler(rss2.BeginRead), new EndEventHandler(rss2.EndRead), nullnulltrue);

        RegisterAsyncTask(task1);
        RegisterAsyncTask(task2);
    }

    
void RssAsync_PreRenderComplete(object sender, EventArgs e)
    {
        Literal1.Text 
= rss1.GetData();
        Literal1.Text 
+= rss2.GetData();
    }
AsyncReader是封装的一个类,代码如下:
 AsyncReader
{
    private WebRequest _req;
    
private string _rssData;
    
private string _url;

    
public AsyncReader(string url)
    {
        _url 
= url;
    }

    
public IAsyncResult BeginRead(object sender, EventArgs e, AsyncCallback cb, object state)
    {
        _req 
= WebRequest.Create(_url);

        IAsyncResult obj 
= _req.BeginGetResponse(cb,state);
        
return obj;
    }

    
public void EndRead(IAsyncResult ar)
    {
        String str;
        
using (WebResponse response = _req.EndGetResponse(ar))
        {
            StreamReader reader;
            
using (reader = new StreamReader(response.GetResponseStream()))
            {
                str 
= reader.ReadToEnd();
            }
            _rssData 
= formateStr(str);
        }
    }

    
/// <summary>
    
/// 格式化字符,比如xml格式等。这里我就直接返回了,实例而已
    
/// </summary>
    
/// <returns></returns>
    private string formateStr(string str)
    {
        
return str;
    }

    
/// <summary>
    
/// 获取异步调用返回的数据
    
/// </summary>
    
/// <returns></returns>
    public string GetData()
    {
        
return _rssData;
    }
}

 

WebService异步调用
1.asp.net 2.0开始,提供简单的方法实现异步调用
AsyncWebService.aspx.cs

    protected void Page_Load(object sender, EventArgs e)
    {
        
this.getHello();
    }

    
private void getHello()
    {
        webServerAsync.WebService1 hello 
= new webServerAsync.WebService1();

        
///同步调用WebService方法
        //Literal1.Text = hello.HelloAsync("张三", 30);

        
//异步调用WebService方法
        hello.HelloWorldCompleted += new webServerAsync.HelloWorldCompletedEventHandler(hello_HelloWorldCompleted);
        hello.HelloWorldAsync(
"张三"20);
    }

    
void hello_HelloWorldCompleted(object sender, webServerAsync.HelloWorldCompletedEventArgs e)
    {
        Literal1.Text 
= e.Result;
    }


为了调用方便,以及代码重用,我也封装了一个类
AsyncWebService.aspx.cs

    helloRader hello1, hello2;
    
public string helloData;

    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!IsPostBack)
            dataBind();
    }

    
private void dataBind()
    {
        PreRenderComplete 
+= new EventHandler(RssAsync_PreRenderComplete);

        hello1 
= new helloRader("张三"20);
        hello2 
= new helloRader("李四"22);

        PageAsyncTask task1 
= AsyncTask(hello1);
        PageAsyncTask task2 
= AsyncTask(hello2);

        RegisterAsyncTask(task1);
        RegisterAsyncTask(task2);
    }

    
private PageAsyncTask AsyncTask(helloRader hello)
    {
        
return new PageAsyncTask(new BeginEventHandler(hello.BeginRead), new EndEventHandler(hello.EndRead), nullnulltrue);
    }

    
void RssAsync_PreRenderComplete(object sender, EventArgs e)
    {
        Literal1.Text 
= hello1.GetData() + "</br>";
        Literal1.Text 
+= hello2.GetData();
    }

helloRader.cs
 helloRader
{
    private webServerAsync.WebService1 _req;
    
private string _rssData;

    
private string _user;
    
private int _age;

    
public helloRader(string user,int age)
    {
        
//
        
//TODO: 在此处添加构造函数逻辑
        
//
        _user = user;
        _age 
= age;
    }

    
public IAsyncResult BeginRead(object sender, EventArgs e, AsyncCallback cb, object state)
    {
        _req 
= new webServerAsync.WebService1();

        IAsyncResult obj 
= _req.BeginHelloWorld(_user,_age,cb, state);
        
return obj;
    }

    
public void EndRead(IAsyncResult ar)
    {
        String str;
        str 
= _req.EndHelloWorld(ar);
        _rssData 
= str;
    }

    
/// <summary>
    
/// 格式化字符,比如xml格式等。这里我就直接返回了,实例而已
    
/// </summary>
    
/// <returns></returns>
    private string formateStr(string str)
    {
        
return str;
    }

    
/// <summary>
    
/// 获取异步调用返回的数据
    
/// </summary>
    
/// <returns></returns>
    public string GetData()
    {
        
return _rssData;
    }
}
源码下载

相关文章:

  • 2021-12-14
  • 2022-12-23
  • 2022-12-23
  • 2022-02-26
  • 2022-12-23
  • 2022-02-25
  • 2022-12-23
  • 2021-08-18
猜你喜欢
  • 2021-05-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
  • 2021-10-07
  • 2021-07-28
相关资源
相似解决方案