MVC系列(2) HttpRuntime详解分析(上)

文章内容

从上章文章都知道,asp.net是运行在HttpRuntime里的,但是从CLR如何进入HttpRuntime的,可能大家都不太清晰。本章节就是通过深入分析.Net4的源码来展示其中的重要步骤。请先看下图:

首先,CLR在初始化加载的时候,会加载一个非常重要的类AppManagerAppDomainFactory,这个类是做什么用的呢?首先这个类继承了IAppManagerAppDomainFactory接口,而这个接口是是有个可供COM调用的Create方法,代码如下:

[ComImport, Guid("02998279-7175-4d59-aa5a-fb8e44d4ca9d"), System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)]
    public interface IAppManagerAppDomainFactory {
#if !FEATURE_PAL // FEATURE_PAL does not enable COM
        [return: MarshalAs(UnmanagedType.Interface)]
#else // !FEATURE_PAL
        Object Create(String appId, String appPath);
#endif // !FEATURE_PAL  

        Object Create([In, MarshalAs(UnmanagedType.BStr)] String appId,
                      [In, MarshalAs(UnmanagedType.BStr)] String appPath);  

        void Stop();
    }

我们来细看一下这个AppManagerAppDomainFactory是如何实现这个接口的,首先该类在默认的构造函数里,获取了一个ApplicationManager的实例用于在Create方法里使用。代码如下:

[SecurityPermission(SecurityAction.Demand, Unrestricted=true)]  

public AppManagerAppDomainFactory() {  

    _appManager = ApplicationManager.GetApplicationManager();  

    _appManager.Open();  

}

回到实现接口的Create方法,我们来看最重要的3行代码:

ISAPIApplicationHost appHost = new ISAPIApplicationHost(appId, appPath, false /*validatePhysicalPath*/);  

ISAPIRuntime isapiRuntime = (ISAPIRuntime)_appManager.CreateObjectInternal(appId, typeof(ISAPIRuntime), appHost,  

        false /*failIfExists*/, null /*hostingParameters*/);  

isapiRuntime.StartProcessing();

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 接口
create
springmvc注解详解、spring mvc.xml详解、spring mvc详解、spring mvc原理详解、spring4 mvc配置详解,以便于您获取更多的相关知识。

时间: 2024-10-30 04:13:04

MVC系列(2) HttpRuntime详解分析(上)的相关文章

MVC系列(3) HttpRuntime详解分析(下)

文章内容 话说,经过各种各样复杂的我们不知道的内部处理,非托管代码正式开始调用ISPAIRuntime的 ProcessRequest方法了(ISPAIRuntime继承了IISPAIRuntime接口,该接口可以和COM进行交互,并且暴露了 ProcessRequest接口方法).至于为什么要调用这个方法,大叔也不太清楚,找不到微软相关的资料哦.但大叔确定该方法就是我们进入 HttpRuntime的正式大门,接着看吧. public int ProcessRequest(IntPtr ecb,

《Ansible权威指南》一2.4 Ansible系列命令用法详解与使用场景介绍

2.4 Ansible系列命令用法详解与使用场景介绍 如何获取Ansible的系列命令呢?在终端键入ansible后连续按两次Tab键,会补全所有以ansible字母开头的命令,这些命令均是Ansible系列命令.本节我们来逐一介绍Ansible的系列命令使用. ansible ansible-galaxy ansible-pull ansible-doc ansible-playbook ansible-vault ansible-console 2.4.1 ansible 命令ansible

AngularJS tab栏实现和mvc小案例实例详解

tab栏: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tab 标签</title> <style> body { margin: 0; padding: 0; background-color: #F7F7F7; } .tabs { width: 400px; margin: 3

Android组件系列----Activity组件详解

[正文] 注:四大组件指的是应用组件:Activity.Service.BroadcastReceiver.ContentProvider:之前的控件指的是UI组件. 博文目录: 一.Activity简介 二.Activity的状态和生命周期 三.Activity的基本用法 四.向下一个Activity传递数据 五.返回数据给上一个Activity 六.Activity运行时屏幕方向与显示方式 七.Activity的现场保存 八.Activity通过SharedPreferences保存数据 一

spring mvc 框架搭建及详解

现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.comm

Android SwipeMenuListView框架详解分析_Android

周末 特地把Android SwipeMenuListView(滑动菜单)的知识资料整理一番,以下是整理内容: SwipeMenuListView(滑动菜单) A swipe menu for ListView.--一个非常好的滑动菜单开源项目. Demo  一.简介 看了挺长时间的自定义View和事件分发,想找一个项目练习下..正好印证自己所学. 在github上找到了这个项目:SwipeMenuListView这的真不错,对事件分发和自定义View都很有启发性,虽然还有点小瑕疵,后面说明.想

Tomcat 配置技巧精华详解分析

技巧|精华|详解 1.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手.Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context.data source.user和group等.当然也可以管理像初始化参数,user.group.role的多种数据库

Linux精华 Tomcat服务器配置技巧详解分析

服务器|技巧|精华|详解 1.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手.Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context.data source.user和group等.当然也可以管理像初始化参数,user.group.role的多

PHP 脚本数据库功能详解(上)

脚本|数据|数据库|详解 在当前互联网发展迅速.电子商务网站层出不穷的形势下,对网站开发 的效率和质量提出了越来越高的要求. 对于大型和结构复杂.内容繁多的网站,都要实现网站的动态化和 方便的管理.数据管理离不开数据库系统的支持.而衡量一种CGI语言的 重要标志,就是它对后台数据库的访问能力.效率等. 而目前流行的PHP脚本语言,它的新特性给我们带来了新的感觉.它支持以面向对象的方 式进行设计开发.同时,为了满足网页独特的需要,用模板.XML支持等带来了网站开发的新 方法.在语言结构上,PHP具