知识大全 浅谈ASP.NET的内部机制(二)
Posted 文件
篇首语:与天地兮比寿,与日月兮齐光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅谈ASP.NET的内部机制(二)相关的知识,希望对你有一定的参考价值。
浅谈ASP.NET的内部机制(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
上次已经说到了 sys和aspnet_filter的功能 希望大家还记得!
当一个请求(也就是 Request)通过了 sys和aspnet_fitler后 此时这个请求还没有被传递给ASP NET的处理程序 但是此时IIS就会在它的MIME Type中查找请求文件的处理程序
其实MIME Type不神秘 就是注册了哪些文件由哪些组件来处理 大家看看下面的图就明白了
大家应该对上面的图很熟悉 而IIS就是通过查找上面的那个表来决定一个请求到底请求的是那种文件 如果是静态的文件 如 那么这个请求就直接由IIS来处理了 也不会传递给ASP NET处理程序 如果请求的文件是 aspx或者 asmx等 那么IIS就知道请求是就传递给aspnet_isapi dll的 随后就启动一个进程来加载这个dll 随后就开始进行一系列的初始化工作 然后就把请求传递给ASP NET
下面我们就来详细的看看 在真正处理一个请求的时候 到底进行了哪些的初始化操作
当IIS知道了处理的是 aspx的文件后 就启动一个进程w wp exe来开始运行ASP NET
因为此时aspnet_isapi dll已经加载运行了 而且aspnet_isapi dll是一个用托管代码编写的组件 而所有的托管代码都要运行在应用程序域(Application Domain 以后我们简称Domain)中 所以进行加载后 首先就是建立一个Domain 因为我们请求的是一个ASP NET中的一个页面 而且这个页面是属于一个用ASP NET开发的网站 所以这个网站就是一个应用程序 要在Domain中运行的 但是建立一个Domain要经过很多的步骤的 (注 大家也许认为没有必要把建立Domain的步骤弄清楚 但是我认为很有必要 因为在建立一个Domain的过程中 涉及到很多的ASP NET的内部问题 而且这个问题在实际开发中也很重要 如ASP NET运行时的权限和可信域(与安全问题相关) 也涉及代码安全等 还可以帮助我们理解代码的编译)
下面就来说说建立一个Domain的步骤
为一个Domain建立标识
验证访问的文件目录是否存在 并且初始化目录的信息
设置Domain的信任级别
设置程序集的位置
得到自动生成的机器码
初始化ASP NET编译系统
首先 我们来看看 为一个Domain建立标识
因为一个应用程序是运行在服务器的硬盘上的 所以在运行的时候必须有一个标识(identity) 其实标识就是运行程序的用户名和ID 这是操作系统要的 在IIS 中 一个ASP NET程序就是以NT AUTHORITY\\NEORK SERVICE的身份来运行的 因为不同的identity对系统的操作权限不同 我们可以在配置文件 如nfig中配置别的权限 使得我们的程序可以进行更多的操作(如写入文件 读取系统注册表等) 只要配置<identity />
其次 我们来看看 验证访问的文件目录是否存在 并且初始化目录的信息
一个ASP NET网站的由很多的文件组成的 如果我们请求的的文件在这个网站中没有或者我们没有读取那个文件的权限 那么就会产生从服务器返回错误的信息
而且ASP NET还会初始化一些目录的信息 如在App_Data中的文件 因为 Net Framework 以后的版本 ADO NET的还会自己的把数据文件与Sql Server相连 并且建立连接
最后就是还会决定一个ASP NET的网站的自动产生的代码回放在哪里 比如我们请求一个Default aspx页面 这个页面还有一个 cs文件 在我们请求时 这两个文件会生成一个继承Page的类 所以ASP NET必须决定这个生成的文件放在哪里
然后 我们来看看 设置Domain的信任级别
其实一个Domain的信任级别就决定了这个Domain可以做哪些事情 也就是一个Domain的权限有多大
主要有 Enterprise Machine User Application domain
其实这也是一个代码访问安全的问题(code access security (CAS)) 就是说 这个Domain中的应用程序的代码可以执行的操作的权限 比如 如果Domain的信任级别很大 甚至程序中的代码可以访问Windows API
我们可以在调用System AppDomain CurrentDomain SetAppDomainPolicy 来设置级别
再次 我们来看看 设置程序集的位置
上面的一些步骤就已经建立了一个Domain的安全策略 一个Domain中运行的网站一般会有一些程序集的 而且位于bin目录下 还有之前提过的自动的类也会会被编译为程序集 NET Framework会监管这些程序集
再后 我们来看看 得到自动生成的机器码
其实机器码就是machineKey 每个应用程序在运行的时候 都会有machineKey 一般是ASP NET随机生成的 但是我们也可以自动的制定 在nfig的<machineKey />中制定 这个功能很有用的 比如你有几个服务器 或者几个不同的网站 我们希望在一台服务器上的网站登录后 然后我们在其他的服务器的网站上去的时候 我们就可以是已经登录用户 也就是可以实现 一次登录 到处可用
最后 就是 初始化ASP NET编译系统
这时就编译程序集 并且解析其中的类 而且还解析app_webreferences的目录和global asax 程序开始运行了 也有了Application的实例来主导整个应用
cha138/Article/program/net/201311/12262相关参考
浅谈ASP.NET的内部机制(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言当一个Ht
知识大全 浅谈ASP.NET MVC Membership权限机制
浅谈ASP.NETMVCMembership权限机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 浅谈ASP.NET MVC中TempData的实现机制
浅谈ASP.NETMVC中TempData的实现机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET内部机制实现计划任务代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNE
浅谈ASP.NET报表控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 项目中有报表图形化的需
浅谈ASP.NET中render方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
浅谈ASP.NET与HTML页面关系 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNET
浅谈ASP.NETAJAX的WCF服务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在我们已
知识大全 浅谈ASP.NET 4.0 SEO增强中的UrlRouting
浅谈ASP.NET4.0SEO增强中的UrlRouting 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 浅谈ASP.NET MVC中的FluentHtml与连续接口
浅谈ASP.NETMVC中的FluentHtml与连续接口 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一