Ext.NET从IIS6迁移到IIS7后无法显示的解决方案

前段时间把公司的一个用Ext.Net开发的Web系统从Windows Server 2003迁移到了Windows Server 2008下面,然后发现有些功能不能用了。点击后没有内容,一片空白。用开发者工具检查发现http://test.cn/extjs/adapter/ext/ext-base-js/ext.axd?v=36328
这类ext.axd文件找不到,原以为是ext.axd等文件丢失,到开发机上也找不到extjs等文件夹,搜索整个站点文件夹,也找不到ext.axd。看来这些文件是动态生成或者资源重定向了。应该是IIS6下能正常运行的配置在IIS7下出现问题了。

百度Google了半天,Ext.net官网也去过了,都找不到解决办法。还是自立更生吧。解读站点的Web.config配置文件,发现有这么一个说明:

<!–
        在 Internet 信息服务 7.0 下运行 ASP.NET AJAX 需要 system.webServer
        节。对早期版本的 IIS 来说则不需要此节。
    –>

看来是system.webServer下面缺少了某些配置项,导致这个问题。去Ext.net官网下载了带实例的Ext.NET发行包,查看其中的示例配置文件,发现system.webServer有这么两节:

    <modules>
      <add name="DirectRequestModule" preCondition="managedHandler" type="Ext.Net.DirectRequestModule, Ext.Net" />
    </modules>

    <handlers>
      <add name="DirectRequestHandler" verb="*" path="*/ext.axd" preCondition="integratedMode" type="Ext.Net.ResourceHandler" />
    </handlers>
 

对照我的配置文件,没有找到这两节,马上添加上去。再去试试那些有问题的功能,正常了。

Windows Server 2008中IIS7.5的安全设置

  为了防止某个站点被黑后其它站点的文件也受牵连,在IIS6中,多站点下对于站点安全,通常是为每个站点各新建一个用户来运行此站点,然后站点文件夹的安全权限,将相关权限赋予该用户。

  IIS7.5就方便多了。在站点的应用程序池的标志使用ApplicationPoolIdentity时(此为默认设置)启动应用程序池时会动态创建“应用程序池标识”帐户,此账户就是站点运行账户。该账户个真实存在的虚拟账户。说它真实,因为你在进程管理器中会看到IIS站点进程w3wp相应的的运行用户就是应用程序池名,说它是虚拟的,是因为在系统的用户管理里找不到此账户。问题也随之而来,由于找不到账户,在设置站点文件权限的用户权限时即使手工输入账户名也会提示“找不到名称”。那怎么办呢?其实很简单,只要以“IIS AppPool应用程序池名”的格式添加用户就行了。

  可以看出,IIS7.5中不需要为各个站点建立新的账户,省去了管理账号名和密码的烦恼,非常的方便。还在用IIS6的朋友,赶紧升级吧。