虛擬目錄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>

這種配置方法可以用在所有的節點上,使用起來也比較靈活,個人推薦用第二種方法。

 

參考來自 http://blog.csdn.net/papalian/article/details/7204248  就是我看的那篇帖子,介紹的更為詳細一些

最后說一下,昨天從下午三點到晚上十點,今天上午又弄了一個小時。希望大家可以用得上,以后出現同樣的問題直接就可以用了,大家也要多分享

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM