2013/02/28

[WorkLog] I could not run .NET 64bit website successfully on IIS 7 until today : 一直不能在 IIS 7 執行 ASP.NET 64bit 的網站

不知道從前年的什麼時候開始,我那台 (Win7-64bit) 筆電裡的 IIS 7.5 有了個怪毛病,只要我 ASP.NET 網站的應用程式集區不在進階設定裡面把「啟用 32 位元應用程式」更改為 True,它就不給我跑。錯誤畫面長這樣,
HTTP 錯誤 500.0 - Internal Server Error
呼叫 LoadLibraryEx (於 ISAPI 篩選器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上) 失敗
錯誤碼 0x800700c1
這一年多來,在我本機上開發的 ASP.NET 網站,全部因為這個原因只能用 32 位元模式去跑。在工作空檔時,其實也斷斷續續的找尋過問題和解決方式,但都無功而返。雖然這問題不影響網站程式的開發,但我的心情大概就像頭文字 D 裡面的拓海,在他老爸把那台 86 換上一顆超猛的引擎後,卻因為轉速表延用舊速限規格的關係,怎麼行駛都覺得不過癮。

今天,我終於找到怎麼換轉速表問題的癥結點~!

契機是錯誤碼 0x800700c1,我用它搜尋到了這篇 - Why is my site trying to load the 32 bit aspnet_filter.dll even when 'enable32BitAppOnWin64' is set to False?
討論串裡目前得票最高的 Rob Smith 回答的內容大概是說「其實阿,問題的原因在錯誤摘要中就已經提到了,你看看 aspnet_filter.dll,它前面多了個反斜線阿。」

我看一看,心想著"呦呵,真的耶!我的也是。"就接著照著做了,到 C:\Windows\Microsoft.NET\Framework\v4.0.30319 執行了 aspnet_regiis -r。等等!各位別急,千萬別照著做,這個不能解決問題。然後我就接著去把我那 IIS 7.5 裡面所有被修改為 .NET 4.0 的 2.0 網站,一一的人工改回 .NET 2.0 ... 我那無法開啟的 64 位元網站,仍究無法開啟,還是相同的錯誤訊息。

再看看討論串內容,下面 Dan Fitch 大概這麼回應「只用 aspnet_regiis -r 不行耶。先用 aspnet_regiis -ua 把所有 .NET 版本移除後,再用 aspnet_regiis -r 就可以了」

我又看了看,心想著"我不想再用 aspnet_regiis -r 了,把設定洗掉重加很累耶。",再想想"既然這次問題是 32 位元 v4.0.30319 的 aspnet_filter.dll 路徑多了個反斜線,那我先刪這個版本的看看。"接著到了 C:\Windows\Microsoft.NET\Framework\v4.0.30319 執行 aspnet_regiis -u 移除了這個版本,趕快去重新整理那 64 位元的網站 ... 耶嘿! 成功開啟了!我終於能夠在本機跑 64 位元的 ASP.NET 網站程式(泣)

最後再用 aspnet_regiis -i 重裝 32 位元的 v4.0.30319,收工!

to Rob Smith and Dan Fitch, Thank you^^

沒有留言:

張貼留言