IIS 上的 ASP.NET 程式出現 500.19 (0x8007000d) 錯誤?

這是同事在處理 IIS 上的 application 改用 64-bit (不啟用 32-bit) 時遇到的狀況,之前筆記 IIS Express 出現 500.19 - 0x800700b7 錯誤?! 有紀錄到類似的錯誤,也是一樣出現 500.19 當時是因為 web.config 的設定與更上層的 applicationhost.config 或是 machine.config 重覆造成,原以為是相同錯誤定視細看才發現錯誤代碼不同

立馬來看看 0x8007000d 的錯誤原因是什麼吧

錯誤訊息

  • 訊息內容

    Server Error
    Internet Information Services 7.5
    
    Error Summary
    HTTP Error 500.19 - Internal Server Error
    The requested page cannot be accessed because the related configuration data for the page is invalid.
    Detailed Error Information
    Module    IIS Web Core
    Notification    Unknown
    Handler    Not yet determined
    Error Code    0x8007000d
    Config Error    
    Config File    \\?\D:\tempIIS\****\web.config
    Requested URL    http://localhost:8086/
    Physical Path    
    Logon Method    Not yet determined
    Logon User    Not yet determined
    Config Source
    -1: 
        0: 
    Links and More Information
    This error occurs when there is a problem reading the configuration file for the Web server or Web application. In some cases, the event logs may contain more information about what caused this error.
    
  • 錯誤截圖

    1error

  • 錯誤異常狀況

    錯誤訊息指出 web.config 異常,但異常位置卻無法正確指出

    2configerror

問題發生原因

專案 web.config 有 URL Rewrite 相關設定,但新機器 IIS 尚未安裝 URL Rewrite 造成 IIS 無法判讀 web.config 中的設定造成

解決方式

  1. 直接下載 URL Rewrite 並安裝
  2. 透過 Web Platform Installer

    • Product –> 搜尋 URL Rewrite

      3search

    • Add

      4add

    • Install

      5install

心得

剛遇到問題時還真愣了一下,雖然有錯誤訊息但籠統到跟沒有一樣:只說 web.config 有問題,但卻指不出錯誤原因,造成找解決方式時多花了些時間

問題解決再冷靜了段時間才聯想到 ansible 這類的組態設定管理工具受到重視的原因:server 甚至 host machine 的組態設定直接影響系統的可用性,但很多時候都是人為管理也沒有版本控制的觀念,只能透過口耳相傳,隨著人員流動、時間流逝很容易造成設定被遺漏,改天應該找時間來試試不同做法看是不是能徹底解決問題

參考資訊

  1. IIS Express 出現 500.19 - 0x800700b7 錯誤?!
  2. HTTP Error 500.19 - IIS 7.5 Error 0x8007000d