zoukankan      html  css  js  c++  java
  • ASP.NET 核心机制全方位瓦解分析

    VISION:

    后台使用c#编写服务端(=codebehind) 

    前台使用js+ajax交互。

    取消viewstate功能。

    handler本质上是无状态的,因此每次都需要传入数据。 现在就要换一种开发思路。

    -------------------------------------------------------------------

    http://www.cnblogs.com/artech/archive/2007/04/06/702658.html

    浅谈ASP.NET的Postback 

    点击一个button的postback: 

    代码
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />                
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA0NDQ2OTE5OWRk281L4eAk7iZT10hzg+BeOyoUWBQ=" />

    Server端通过__EVENTTARGET这个hidden field的值找到对应的Server端的Control 

    那么调用Page的RaisePostBackEvent方法

    代码
    [EditorBrowsable(EditorBrowsableState.Advanced)]
    protected virtual void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
    {
        sourceControl.RaisePostBackEvent(eventArgument);
    }
    代码
    protected virtual void RaisePostBackEvent(string eventArgument)
    {
        
    base.ValidateEvent(this.UniqueID, eventArgument);
        
    if (this.CausesValidation)
        {
            
    this.Page.Validate(this.ValidationGroup);
        }
        
    this.OnClick(EventArgs.Empty);
        
    this.OnCommand(new CommandEventArgs(this.CommandName, this.CommandArgument));
    }

    这篇文章,大概知道,通过hiddenfield + input,服务器反射获取对象,然后指定接口触发调用。问题就在于,是否一个httpHandler反射对象然后加载? 还是有很多个?

    http://www.cnblogs.com/artech/archive/2007/05/21/753620.html

    深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

    asp.net里面一个page1。动态编译为: 

     Page1和Page2的编译后的Type name变成了part_i_page1_aspx& Page1part_i_page2_aspx& Page2

     part_i_page1_aspx中定义了一个基于aspx的HttpHandler所需的所有操作,并且它继承了Page1。

     对Part I/Page1的Http Request,ASP.NET所要做的就是生成一个part_i_page1_aspx来Handle这个request就可以了。 

    还有一个FastObjectFactory, 高效的生成对象。而生成的是什么样的对象呢?实际上就是基于每个aspx的Http request的Http handler,对于Part I/Page1就是我们上面一节分析的part_i_page1_aspx对象。

    一个页面,会对应一个handler,这个handler包含了页面的所有对象(textbox....) ,而且这些对象是动态生成的。被反射调用。

    现在我们来总结整个动态编译的过程:

    Step1:当ASP.NET收到对于某个Page的Request,根据这个request对应的Url试着找到该page对应的Preservation File,如果没有找到,重新编译Page所在目录下的所有需要编译的文件,同时生成一些额外的文件,包括Preservation File。

    Step2:然后解析这个Preservation File,通过hash和filehash判断文件自身或者是Dependent File是否在上一次编译之后进行过任何的修改,如果是的,则重新编译。然后重新执行Step2。

    Step3:通过Preservation File 的assembly attribute Load对应的assembly(如果Assembly还没有被Load的话),通过type获知对应的aspx type,然后借助FastObjectFactory的对应的Create_ASP_XXX创建这个type。这个新创建的对象就是我们需要的Http Handler,在之上执行相应的操作把结果Response到客户端。

    -------------------------------------------------------------------

    http://www.theserverside.net/tt/articles/showarticle.tss?id=IIS_ASP

      Inside IIS & ASP.NET

     IIS communicates with the .NET framework through unmanaged ISAPI extensions: aspnet_isapi.dll and aspnet_filter.dll.

     along with the state Windows service (aspnet_state.exe) and the ASP.NET worker process (aspnet_wp.exe) are the core of the ASP.NET processing model.

    <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/> 

    Implementing IHttpHandlerFactory

    Where HTTP handlers may be useful in responding to requests for specific resources, a handler factory makes it possible to intercept a request, perform some pre-processing on the request, and then following a factory pattern, create the handler for the resource.

    ----------------------------------------------------------------------- 

    http://msdn.microsoft.com/en-us/library/ms972976.aspx

    Understanding ASP.NET View State

    View state's purpose in life is simple: it's there to persist state across postbacks.

    ----------------------------------------------------------------------- 

    ASP.NET MVC 入门:

    http://www.cnblogs.com/qleelulu/archive/2008/10/05/1303997.html

    /Views/{Controller}/{Action}.aspx 

    asp.net mvc 的页面实际上是一些<%% > 进行模板解析。

    Q:在mvc中,如何才持久数据?例如在后台获取某个txtbox的text?

    理论上是无法获取的。因为是无状态的,除非请求主动发送。 

    ----------------------------------------------------------------------- 

    http://www.cnblogs.com/jmtek/archive/2006/02/16/331961.html

    ASP.NET运行模式:PageHandlerFactory

     

    JS框架如何和服务器交互? 

    ------------------------------------

    http://www.pin5i.com/showtopic-20894.html

    ExtJS 中使用Asp.net编写后台服务器程序的几种方式

    1. wcf

    2. 写一个aspx,在page_load里面对request的string进行switchcase

    3. 继承httphandler,  反射method进行操作。

    http://tech.it168.com/a2010/0106/833/000000833411.shtml

    现有的Ajax从框架角度分级的话,可以有以下分类:

      ·零级,完成base工作,包括扩展原有对象的方法,Ajax通讯部分,比较精简。

      ·一级,完成effect工作,包括增加常用效果转换函数,如tween、drag、maskLayer、fade等的特效。

      · 二级,完成component工作,包括对话框、列表、树、日历等的组件。

      ·三级,完成application工作,包括完整的前端平台,允许用户定义能实现一定功能的模块。

      一些框架只做零级,如Prototype.js,一些框架做到一级,如jQuery ,一些框架做到了三级,如Asp.net Ajax 和EXT。

      选择合适的Ajax框架能提升程序效率,减少开发工作量,优化显示效果等作用。

    ---------------------------------------

    理想中的开发框架:

    1. 使用js实现智能参数回传(js+hidden input + 反射方法体需要的对象id生成回调传入参数) 

    private void onclick()

    {

    string username =  Postback["id"] ; // 这里得知控件id,然后生成html页面的时候动态生成js进行智能回调,实现高性能viewstate

    }  

    2. 使用asp.net / c#作为服务端技术。

    不使用asp.net的项目,版本维护、代码关联很困难。直接使用类库进行服务端编写。因此需要实现factory。

    asp.net 指定了assembly, classname 

    客户端返回请求 Action.aspx,  映射成为metod.

    3.   

  • 相关阅读:
    Python TCP服务器
    Python TCP客户端
    链接测试工具xenu link sleuth的使用
    nodejs & nodemailer
    node socket.io web
    簡單的爬蟲 二 ಥ_ಥ 爬一爬 一個博客的每篇文件的標題
    簡單的爬蟲 一 ಥ_ಥ(就是一個頁面)
    兩端對齊
    appframework(jqmobi) 3.0 设置
    sass mapsource --->gulp
  • 原文地址:https://www.cnblogs.com/zc22/p/1823533.html
Copyright © 2011-2022 走看看