生产中的HttpContext.Current.Request为null

时间:2011-10-06 14:56:40

标签: c# .net wcf

在我的WCF应用程序中,我有一个类似这样的Global.asax.cs来检索基本URL:

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

在我的开发框(localhost)中,它工作正常。但是当我将其推向生产时,System.Web.HttpContext.Current.Request会返回null

任何人都知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:8)

这可能是因为在开发过程中,您的应用程序池处于“经典”模式(或在IIS 6上)。

在制作中,您的应用程序池设置为“集成”。集成不允许您访问Request中的Application_Start对象。

经典行为允许这样做,因为在经典模式下启动ASP.NET应用程序的唯一方法是使用第一个请求。在集成模式下,应用程序可以通过除请求之外的其他方式启动(例如应用程序预热)。

您可以在IIS's Website上找到有关原因以及如何解决此问题的详细信息。

最终,您有两种选择:

  1. 将AppPool切换到经典模式。
  2. 不要访问Application_Start中的Request对象。

答案 1 :(得分:4)

将评论移至答案:

您不应该尝试访问Application_Start事件中的当前请求。