IIS 虚拟目录 500 webconfig的配置

 昨天需要新建一个虚拟目录放在以前的一个站点下,新建了应用池,配好了环境置顶路径,虚拟目录页建立成功 ,但是程序一直是报错。这个程序我在测试服务器上是测过的,新建了一个站点是可以正常访问的,排除了程序问题。

一直是报500,在webconfig配置抛出错误的 customErrors节点也不起作用,后来把程序全部删掉放了一个静态页,是可以访问成功的,说明虚拟目录的配置也是没问题的,毫无头绪,在网上查了好久各种配置都试过了还是不行,今天无意中看见了一个帖子给我灵感,然后试了一下果然成功了

    虚拟目录的webconfig是继承了根目录的webconfig的所有配置的,所以如果有节点名称是一样的话就会有冲突报错。这时候很可能会出 http 500的错误

 

 

  这个时候有两种方法可以解决

1.在根目录解除子目录的继承

复制代码
复制代码
1 <configuration>
2   <!--...其他配置...-->
3   <location path="." inheritInChildApplications="false">
4     <system.web>
5 
6     </system.web>
7   </location>
8   <!--...其他配置...-->
9 </configuration>
复制代码
复制代码

这里的inheritInChildApplications就是接触子目录webconfig的继承,将不需要子目录继承的节点放在这个节点里面就ok了

这种方法的优点是很简单,但是不够灵活,同时面对较复杂的Web.config配置,仍可能会报错。比如根目录和子目录有着不同的system.webServer配置,按照这个方法在根目录的system.webServer外面加上了location限制,不幸的是,IIS7下会出现500错误。

2.在子目录对冲突的节点处理

根目录节点

1 <connectionStrings>
2     <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123" providerName="System.Data.SqlClient"/>
3   </connectionStrings>

子目录节点

1 <connectionStrings>
2     <clear/>
3     <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123" providerName="System.Data.SqlClient"/>
4   </connectionStrings>

在冲突的节点前先clear,清除之前的配置,然后再加载下面的配置就可以了,除了clear 还有remove也可以

 <connectionStrings>
    <remove name="DBConnectionString"/>
    <add name="DBConnectionString" connectionString="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123" providerName="System.Data.SqlClient"/>
  </connectionStrings>

这种配置方法可以用在所有的节点上,使用起来也比较灵活,个人推荐用第二种方法。

posted @ 2020-04-29 16:49  末日里的一抹阳光  阅读(930)  评论(0编辑  收藏  举报