文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于ASP.NET与CLR相互关系的一些总结

关于ASP.NET与CLR相互关系的一些总结

时间:2010-10-21  来源:jasenkin

CLR(COM服务器)       CLR作为一个COM服务器实现在MSCorWks.dll文件中。安装.NET Framework时,表示CLR的COM服务器被注册到Windows的注册表里。 MSCorEE.dll(垫片)       MSCorEE.dll的职责是判断创建何种版本的CLR。 非托管应用程序宿主调用MSCorEE.dll(shim)中CorBindToRuntimeEx函数或者另一个相似的函数来创建CLR COM的实例。            一台机器可以安装多个版本的CLR,但在机器中只有一个版本的MSCorEE.dll文件。       以上两者之间的关系如下代码所示(c++):     MSCorEE.dll(垫片)---->CLR(COM服务器) #include <Windows.h>
#include <MSCorEE.h>
#include <stdio.h>
#pragma comment(lib,"mscoree.lib")
int main(int argc, CHAR* argv[])
{
    ICLRRuntimeHost *pClrHost;
    //调用<MSCorEE.h>中的CorBindToRuntimeEx()生成COM服务器
    HRESULT hr= CorBindToRuntimeEx(NULL, NULL, NULL, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&pClrHost); 
    //启动clr
    pClrHost->Start();   
     //............................其他操作   
     //终止clr
     pClrHost->Stop();
     getchar();
     return 0;
}
    应用程序域(AppDomain)     一个应用程序域是一组程序集的一个容器。应用程序域的全部目的就是提供隔离性。   ASP.NET 应用程序生命周期的各个阶段
(一)用户从 Web 服务器请求应用程序资源(映射文件扩展名)
     ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点。ASP.NET 是 Web 服务器下的 ISAPI 扩展。Web 服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个 ISAPI 扩展处理该请求,然后将该请求传递给合适的 ISAPI 扩展。ASP.NET 处理已映射到其上的文件扩展名,如 .aspx、.ascx、.ashx 和 .asmx。
  (二)ASP.NET 接收对应用程序的第一个请求。
     当 ASP.NET 接收到对应用程序中任何资源的第一个请求时,名为 ApplicationManager 的类会(1)创建一个应用程序域。在应用程序域中,(2)将HostingEnvironment 类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。下面的关系图说明了这种关系:
    运行ASP.NET的进程为W3WP.EXE         编写下述代码,我们可以观察一下HostingEnvironment 的各种属性:  1 <script runat="server">
 2   protected void Page_Load(object sender, EventArgs e)
 3   {
 4       StringBuilder sb = new StringBuilder();
 5       sb.Append(System.Web.Hosting.HostingEnvironment.ApplicationID).Append("<br/>")
 6           .Append(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath).Append("<br/>")
 7            .Append(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath).Append("<br/>")
 8             .Append(System.Web.Hosting.HostingEnvironment.SiteName).Append("<br/>")
 9              .Append(System.Web.Hosting.HostingEnvironment.ApplicationHost.ToString());      
10       Response.Write(sb.ToString());    
11   }
12 </script>
         输出内容为: a215d83d                                                   //ApplicationID
E:\MVC\Jasen\Jasen.Web\                                    //存储该应用程序的文件夹的名称
/
默认网站
System.Web.Hosting.SimpleApplicationHost 
    (三)为每个请求创建 ASP.NET 核心对象。
     ASP.NET 创建并初始化核心对象,如 HttpContext、HttpRequest 和 HttpResponse。HttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequest 和 HttpResponse 对象。HttpRequest 对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。HttpResponse 对象包含发送到客户端的响应,包括所有呈现的输出和 Cookie。
 
(四)将 HttpApplication 对象分配给请求
     初始化所有核心应用程序对象之后,将通过创建 HttpApplication 类的实例启动应用程序。如果应用程序具有 Global.asax 文件,则 ASP.NET 会创建 Global.asax 类的一个实例,并使用该派生类表示应用程序。MVC  Global.asax文件内容如下:
 1  public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
            //AreaRegistration.RegisterAllAreas();
            //RegisterGlobalFilters(GlobalFilters.Filters);
            //ViewEngines.Engines.Add(new ViewEngine());
            //RegisterRoutes(RouteTable.Routes);
 5             //请求 ASP.NET 应用程序中第一个资源时调用。在应用程序的生命周期期间仅调用一次 
 6             //Application_Start 方法。可以使用此方法执行启动任务,如将数据加载到缓存中以及初始化静态值。 
 7 
 8             //在应用程序启动期间应仅设置静态数据。
 9         }
10 
11         public override void Init()
12         {
13             base.Init();//在创建了所有模块之后,对 HttpApplication 类的每个实例都调用一次。
14         }
15 
16         public override void Dispose()
17         {
18             base.Dispose();//在销毁应用程序实例之前调用。可使用此方法手动释放任何非托管资源。
19         }
20 
21         public void Application_End()
22         {
23             //在卸载应用程序之前对每个应用程序生命周期调用一次。
24         }
25     }
         HttpApplication 进程的一个实例每次只处理一个请求。Application_Start 和 Application_End 方法,在应用程序域的生命周期期间,ASP.NET 仅调用这些方法一次,而不是对每个 HttpApplication 实例都调用一次。
(五)由 HttpApplication 管线处理请求。在处理该请求时将由 HttpApplication 类执行以下事件。
1.对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。 2.如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。 3.引发 BeginRequest 事件。 4.引发 AuthenticateRequest 事件。引发 PostAuthenticateRequest 事件。 5.引发 AuthorizeRequest 事件。引发 PostAuthorizeRequest 事件。 6.引发 ResolveRequestCache 事件。引发 PostResolveRequestCache 事件。 7.根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。 8.引发 PostMapRequestHandler 事件。 ----------------------------------------------------------------------------------------------------------------------- 9.引发 AcquireRequestState 事件。引发 PostAcquireRequestState 事件。 10.引发 PreRequestHandlerExecute 事件。 11.为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法。例如,如果该请求针对某页,则当前的页实例将处理该请求。             一般处理文件ashx的ProcessRequest():速度较快 12.引发 PostRequestHandlerExecute 事件。 13.引发 ReleaseRequestState 事件。引发 PostReleaseRequestState 事件。 ----------------------------------------------------------------------------------------------------------------------- 14.如果定义了 Filter 属性,则执行响应筛选。 15.引发 UpdateRequestCache 事件。引发 PostUpdateRequestCache 事件。 16.引发 EndRequest 事件。 17.引发 PreSendRequestHeaders 事件。 18.引发 PreSendRequestContent 事件。
 
       2年多了,回过来再重新温习一次,感觉不错。  
作者:
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载