2011-10-06 35 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