2011-10-06 80 views
2

在我的WCF應用程序,我有一個Global.asax.cs中像這樣的東西來獲取基礎URL:HttpContext.Current.Request空在生產

protected void Application_Start(object sender, EventArgs e) 
{ 
    string baseURL = System.Web.HttpContext.Current.Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped); 
} 

在我的開發(本地主機)它工作正常。但是當我把它推到生產System.Web.HttpContext.Current.Request返回null

任何人都知道爲什麼會發生這種情況?

+0

是生產應用程序託管在IIS上。 – capdragon

+5

你爲什麼試圖在應用程序啓動事件上使用當前請求?應用程序可能會或可能不會由請求啓動。 –

+0

@ liho1eye。衛生署!當然!我現在覺得很小,對不起,我應該刪除這篇文章嗎? – capdragon

回答

4

搬進答案評論:

你不應該試圖訪問內部Application_Start事件當前請求。

8

這很可能是因爲在開發過程中,您的應用程序池處於「經典」模式(或在IIS 6上)。

在生產中,您的應用程序池設置爲「集成」。 Integrated不允許您訪問Application_Start中的Request對象。

經典行爲允許這樣做,因爲在經典模式下啓動ASP.NET應用程序的唯一方法是使用第一個請求。在集成模式下,應用程序可以通過除請求以外的其他方式啓動(例如應用程序預熱)。

你可以在IIS's Website找到更多關於爲什麼以及如何解決這個問題的信息。

最後,你有兩個選擇:

  1. 您的應用程序池切換到經典模式。
  2. 請勿訪問Application_Start中的Request對象。
+2

vcsjones,下降'科學 – heisenberg