1. 程式人生 > >解決XP下iis5.1訪問 IIS 元資料庫失敗

解決XP下iis5.1訪問 IIS 元資料庫失敗

        今天永和維護,解決了一個問題,一個困擾了我們一個下午加半個晚上的問題,還是釋出的經驗不是特別多引起的,借這個機會來分享一下收穫的經驗。

一、遇到的問題

        其實就是訪問 IIS 元資料庫失敗這個主要問題,具體內容如下:

訪問 IIS 元資料庫失敗。 
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。

異常詳細資訊: System.Web.Hosting.HostingEnvironmentException: 訪問 IIS 元資料庫失敗。

用於執行 ASP.NET 的程序帳戶必須具有對 IIS 元資料庫(如 IIS://servername/W3SVC)的讀訪問權。有關如何修改元資料庫許可權的資訊,請參見 http://support.microsoft.com/?kbid=267904。

源錯誤:

執行當前 Web 請求期間生成了未處理的異常。可以使用下面的異常堆疊跟蹤資訊確定有關異常原因和發生位置的資訊。
堆疊跟蹤: 
[HostingEnvironmentException: 訪問 IIS 元資料庫失敗。]
   System.Web.Configuration.MetabaseServerConfig.MapPathCaching(String siteID, VirtualPath path) +690    System.Web.Configuration.MetabaseServerConfig.System.Web.Configuration.IConfigMapPath.MapPath(String siteID, VirtualPath vpath) +9
   System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath, Boolean permitNull) +174
   System.Web.CachedPathData.GetConfigPathData(String configPath) +398
   System.Web.CachedPathData.GetConfigPathData(String configPath) +263
   System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp) +166
   System.Web.Configuration.RuntimeConfig.GetLKGRuntimeConfig(VirtualPath path) +187
--------------------------------------------------------------------------------
版本資訊: Microsoft .NET Framework 版本:4.0.30319.42; ASP.NET 版本:4.0.30319.42

        這個問題讓我們一度以為是IIS沒有安裝好引起的,因為xp系統是不自帶IIS的需要從光碟上裝,所以就換了好幾個版本的IIS然後重灌了N多次,但是這個問題依舊,後來由於太晚了,也沒有繼續弄下去,讓客戶先去休息了。

二、解決

        第二天,以來客戶就發來訊息說怎麼還是登陸不上,沒有介面呢,於是又開始了漫長的查錯,調整設定的階段。最後在一個部落格上看到了解決方案,和大家分享一下:

       出現這個問題有兩種解決方案,一個是因為ASP.NET沒有在IIS上註冊的原因,導致了ASP.NET的東西不可用引發了許可權的問題,二就只是由於沒有充足的許可權的原因。

        第一個點還是比較像的,因為在IIS中的瀏覽器裡面,頁面是可以出來的,並且只有文字,沒有asp.net的控制元件,這也就說明了是asp.net沒有註冊的原因,於是需要先註冊asp.net 4.0的東西:直接執行——cmd——cd 到.net相應版本的目錄下例如這裡是cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319  (xp系統的特殊路徑,win7是不一樣的路徑),然後要做的就是輸入 aspnet_regiis.exe -i

回車執行就可以了。

   第二種情況就是在已經註冊了asp.net但是還是不行的情況下要做的,給asp.net在iis中提權,方法還是到上一步的目錄下面,執行這個:aspnet_regiis -ga aspnet 就可以了