前幾天提到用HttpHandler即時壓縮JavaScript以兼顧註解隱藏及原始碼偵錯需求,今天部署到某台測試機時出現怪異錯誤:

HTTP Error 500.19 - Internal Server Error

Error Code
   0x800700b7

Config Error
   Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'SrcScriptFilter' 

Config File
   \\ ? \ D:\www\MyWeb\web.config

Config Source:
  113:       <add name="SrcScriptFilter" path="scripts/mycode/*" verb="GET" type="MyWeb.Models.AppScriptsHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
  114:     </handlers>

Requested URL
   httq://localhost:80/Myweb/home/login

Physical Path
   D:\www\MyWeb\home\login

IIS抱怨SrcScriptFilter HttpHandler在web.config重複出現,在web.config搜尋"SrcScriptFilter"關鍵字,確認沒有第二筆,更何況該web.config複製自另一台運作正常主機不應有錯。加上測試機幾週前就裝好MyWeb經過驗證,直到web.config加入AppScriptsHandler才壞掉。

感覺詭異的情境,想了想,該不會是"遞迴"吧?

開啟IIS管理員,印證了我的假設:

httq://localhost/根網站(Root Website)指向D:\www\MyWeb,底下又設了一個httq://localhost/MyWeb虛擬目錄(簡稱MyWeb子網站)也指向D:\www\MyWeb…

啊哈! 根網站與子網站指向同一資料夾,換句話說,MyWeb\web.config既是根網站的web.config,也是MyWeb子網站的web.config;由於父子網站間的web.config有繼承關係,結果就是AppScriptsHandler在根網站先加一次,到了/MyWeb子網站再加一次,就是web.config明明只有一筆,IIS卻一直嚷著重複的原因。這個目錄錯設問題存在已久,但appSettings、customErrors等設定只是被同樣的值覆寫未被察覺,直到多了Handler設定才爆開。

修正目錄設定後,問題消失,結案!


Comments

Be the first to post a comment

Post a comment