人生是一场不能存盘的RPG,我只能尽量多搞几个Screenshot

May 15, 2006

Webcast_ ASP.NET 2.0中的异步页面

Filed under: Web cast学习

–参考–

Asynchronous Pages in ASP.NET 2.0
http://msdn.microsoft.com/msdnmag/issues/05/10/WickedCode/default.aspx
讲座中的内容来源于此

//—————————————————–
Asp.net运行原理:
//—————————————————–

    IIS() -> aspnet_isapi.dll ->aspnet_wp.exe
    
    Asp.net实际是一个IIS ISAPI Extension, 处理到.aspx, .asmx的请求
        C:\WINDOWS\Microsoft.NET\Framework\<version>\aspnet_isapi.dll
    Asp.net的工作进程(host):
        在IIS6中,当IIS运行在 worker process isolation mode 时(default),
        为IIS6的工作进程w3wp.exe
        如果使用ASP.NET Process Model,Asp.net的工作进程为
        C:\WINDOWS\Microsoft.NET\Framework\<version>\aspnet_wp.exe()
   
    win2003上IIS进程池中的进程host.exe,host了.net CLR   
   
    进程隔离级别在IIS5.0和IIS6.0上的区别
      
    运行帐号的不同 ASPNET(IIS5.0),Network service(IIS6.0)
   
    [*]如何测试web 站点的吞吐量:
        IIS Stress , Application center test.

//—————————————————–
Asp.net 1.1中的异步页面实现
//—————————————————–
–参考–
Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code
http://msdn.microsoft.com/msdnmag/issues/03/06/Threading/

讲座中的例子也来源于此

通常情况下,ASP.NET 会调用页面的IHttpHandler.ProcessRequest来处理用户请求,
为了实现异步,在页面的code hehid class 中实现IHttpAsyncHandler,
然后使用IHttpAsyncHandler.BeginProcessRequest来处理请求.BeginProcessRequest会
launch另外一个线程,这个线程会调用base.ProcessRequest,来完成request处理,请注意,
在这种情况下,整个request处理不是使用线程池中的线程完成的,而是在BeginProcessRequest
launch出的线程中完成的.而且BeginProcessRequest在launch一个新线程后马上返回,这样一来.
执行BeginProcessReques的线程也会被重新放到线程池中.

* AsyncDelegate.ashx的扩展名表示它是一个Handler

//—————————————————–
Asp.net 2.1中的异步页面实现
//—————————————————–
1.设置
    <%@Page Async="true"…%>

2.在Page_Load中添加
    AddOnPreRenderCompleteAsync(new BeginEventHander(MyBeginMethod), new EndEventHandler(MyEndMethod));

//—————————————————–
异步调用Web 服务
//—————————————————–
使用proxy上的Completed Event
proxy.FooCompleted += new FooCompletedEventHandler(OnFooCompleted);

proxy.FooAsync (…);

void OnFooCompleted (Object source, FooCompletedEventArgs e)
{
    // Called when Foo completes
}

 

//———————————————
    完整的代码
//———————————————

public partial class AsyncPage : System.Web.UI.Page
{
    private WebRequest _request;

    void Page_Load (object sender, EventArgs e)
    {
        AddOnPreRenderCompleteAsync (new BeginEventHandler(BeginAsyncOperation), new EndEventHandler (EndAsyncOperation));
    }

    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, AsyncCallback cb, object state)
    {
        _request = WebRequest.Create("http://msdn.microsoft.com");
        //—我的工作环境在一个局域网中,要运行例子,需要添加:
        _request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        return _request.BeginGetResponse (cb, state);
    }
   
    void EndAsyncOperation (IAsyncResult ar)
    {
        string text;
        using (WebResponse response = _request.EndGetResponse(ar))
        {
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                text = reader.ReadToEnd();
            }
        }

        Regex regex = new Regex ("href\\s*=\\s*\"([^\"]*)\"",  RegexOptions.IgnoreCase);
        MatchCollection matches = regex.Matches(text);

        StringBuilder builder = new StringBuilder(1024);
        foreach (Match match in matches)
        {
            builder.Append (match.Groups[1]);
            builder.Append("<br/>");
        }

        Output.Text = builder.ToString ();
    }
}

Comments »

The URI to TrackBack this entry is: http://recordsome.blogsome.com/2006/05/15/p27/trackback/

No comments yet.

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Anti-spam measure: please retype the above text into the box provided.






















Get free blog up and running in minutes with Blogsome
Theme designed by Hadley Wickham