昨天同事将一个 ASP.NET 4.0 的网站安装到客户的 IIS6 主机上 (测试环境),结果过程非常不顺利,他们曾经一度觉得客户的主机不知道经过几只手蹂躏过了(因为有好多人在共享 Administrator 账号)进而产生排斥安装在客户主机以及 “为什么我们要用 ASP.NET 4” 的感觉,不过在一群人的努力之下最后还是克服了困难,我特别因此写下笔记,相信这些问题有其他人也可能会遇到。
要执行 ASP.NET 4.0 网站必须先安装 Microsoft .NET Framework 4
安装前必须先确定你的操作系统版本是在支持的范围内:
常见问题1:设定网站站台的 ASP.NET 页签时找不到 ASP.NET 4.0 的选项
注意:如果你只有安装 .NET Framework Client Profile 是不支援 ASP.NET 的,必须下载Microsoft .NET Framework 4 (独立安装程序) 来安装才会完整。
正常来说,只要 Windows Server 2003 已经先安装好 IIS 再安装 Microsoft .NET Framework 4 就可以在 IIS 6.0 网站站台的 ASP.NET 页签找到 ASP.NET 4.0 的选项:
常见问题2:安装好 .NET 4 后还是找不到设定网站站台的 ASP.NET 页签的 ASP.NET 4.0 的选项
这问题通常出在先安装 Microsoft .NET Framework 4 才安装 IIS6,这时必须输入以下指令将 ASP.NET 4.0 注册进 IIS6 即可:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -ir -enable
常见问题3:安装好 .NET 4 也设定好网站站台的 ASP.NET 4.0 的选项依然无法执行网站
这里的「无法执行网站」其实所有执行的页面都会出现 找不到这个页面 (HTTP 错误 404 - 找不到档案或目录) 的响应,不管你怎么设定目录安全性或任何执行权限都无法执行任何 ASP.NET 程序,而且可能只有静态页面可以读取而已,像是如下图示这么一般性的错误讯息真的很容易让 IT 人员不知如何是好:
如果你因为安装 ASP.NET MVC 而有设定「通配符应用程序对应」的话,则会发现网站所有页面包括静态档案读去都会响应 找不到这个页面 的错误!
此问题发生的原因是 IIS6 阻挡了 c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll 程序的执行,由于所有会被导向到此 ISAPI Handler 的要求全部都会失败,所以才会导致你所有 HTTP 要求都会得到 HTTP 404 Not Found 的结果。
解决方式很简单,只要到 [网页服务延伸] 的地方将 ASP.NET v4.0.30319 设定 [允许]即可,如下图示:
常见问题4:ASP.NET 4.0 的网站站台已经设定好也可以正常执行了,但执行一段时间会自己挂掉!
如果你在同一个应用程序集区设定了两个不同版本的 ASP.NET 就会造成这个问题,例如你原本有个 ASP.NET 2.0 的站台,并且设定的应用程序集区为 DefaultAppPool,然而你之后又新增了一个 ASP.NET 4.0 的站台,而默认的应用程序集区也是在 DefaultAppPool 的话就会发生冲突了,这时就会看是哪个站台先被执行起来,先跑起来的那个站台才会抢到所有权,后面执行的那个就会发生 Server Application Unavailable 或 服务器应用程序无法使用 的错误:
解决的方法有二: