將 ASP.NET 網站移轉至 IIS 7 時碰到的問題

總算有機會把原本在 IIS 6 上面跑的 Web 專案移轉到 Windows Server 2008 + IIS 7 環境,但部署完成後,瀏覽網站時卻發生錯誤:

Request is not available in this context.


錯誤來源指向 Global.asax 裡面的這行程式碼:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
Application("vr") = HttpContext.Current.Request.ApplicationPath()
End Sub
原來,在 IIS 7 預設的整合管線(integrated pipeline)模式下,Application_Start 事件裡面已經不能存取 Request 物件。

解決方式有二:

Sol 1: 修改程式碼,改用 HttpRuntime.AppDomainAppVirtualPath 來取得應用程式的虛擬路徑。(此解法比較好)

Sol 2: 修改 Web 應用程式所屬的應用程式集區(application pool),將「Managed 管線模式」從「整合式」改為「傳統」(classic mode),如下圖所示。(這是暫時頂著用的解法)



此外,IIS 7 在安裝時提供了更大的彈性,讓系統管理員可以選擇實際需要的模組,沒用到的可以不用裝(基於安全性的考量)。從「系統管理工具 > 伺服器管理員」展開「角色 > 網頁伺服器 (IIS)」就可以看到這些模組(角色服務),參考下圖:



在部署網站時,不妨試試官方提供的 Microsoft Web Platform Installer 工具。它會自動偵測機器上的作業環境,提供可安裝、以及預設建議的安裝項目,當然,你也可以自行選擇要裝哪些東西。參考下圖:



延伸閱讀
Copyright © 2012. Huan-Lin 學習筆記 - All Rights Reserved
Powered by Blogger
Template Design by Cool Blogger Tutorials
Published by Templates Doctor