Fork me on GitHub

win2012 IIS8 部署出现错误

在新购买的云服务器上安装了自带的IIS8 但是部署站点出现很多错误,原因是缺少组建或者未注册.net版本,其中最典型的错误如下:


HTTP Error 404.3 - Not Found The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

造成这个问题的原因是,在本机上有个多个.NET版本,所以相应有多个ASP.NET Version的类库。而现在我们的Application Pool用的是4.0的版本,但是这个版本没有在IIS上进行注册,所以报出了这个错误。现在我们需要做的,就是注册这个4.0的ASP.NET Version. 在C:\WINDOWS\Microsoft.NET\Framework64\v4.0.xxxx目录下找到IIS Registration Tools,即Aspnet_regiis.exe,然后用DOS窗口的形式启动它,aspnet_regiis -i  

C:\WINDOWS\Microsoft.NET 目录下 会有2.0和4.0 两个文件夹,最好2个都注册。

 请注意如果你是64位系统请选择Framework64 ,否则会无法安装。

此处我选择了2.0  因为我的站点是2.0 

安装好后会出现以上列表,我站点中选择的是 集成模式,关于经典和集成的区别:

 

  1. IIS 6以及IIS 7经典模式

    早期的IIS版本中,IIS接收到一个请求时先判断请求类型,如果是静态文件直接由IIS处理;如果是一个ASP.NET请求类型,IIS把请求发送给IIS的扩展接口ASP.NET ISAPI DLL。ISAPI相当于ASP.NET应用的容器,当他接收到ASP.NET类型的请求后,启动ASP.NET的管道流程执行具体的请求处理流程。整个的流程如下图所示:

    2. IIS 7 模式

    IIS 7和之前的版本区别比较大,IIS7直接把ASP.NET的运行管道流程集成到了IIS上。先看下IIS7从接收请求到请求处理完毕的流程图:

    在IIS7中,ASP.NET请求处理管道Pipeline直接覆盖了IIS本身的管道Pipeline,IIS整个流程按照ASP.ENT管道流程执行,例如BeginRequest、AuthenticateRequest、…、EndRequest。而不是通过插件扩展(ISAPI)形式,不同的内容(jpg、html、php等)通过不同的插件来执行。
    IIS7的优势体现在哪里?开发人员可以实现自定义的HttpModule或者HttpHandler,然后直接集成到IIS上,例如,我可以自定义一个JpgHttpHandler,然后通过IIS的Handler部署方式,把JpgHttpHandler部署到IIS上,处理所有的请求格式为*.jpg的请求。

实际上IIS7集成模式,就是让用户可以通过编写托管代码的handler等,把托管代码插入到IIS内核代码中来解析,方便大家精确控制任意请求,带来更好的扩展性。

至于怎样把自定义的HttpModule或者HttpHandler部署到IIS上并处理指定格式的请求。这里我就不详细介绍了。

参考:https://www.cnblogs.com/w-wanglei/p/aspnet-runtime2.html
http://blog.csdn.net/zxxssdsd/article/details/52280528
posted @ 2018-03-16 10:21  低调的神  阅读(1094)  评论(0编辑  收藏  举报