Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpContext.Current.Request在生产中为空_C#_.net_Wcf - Fatal编程技术网

C# HttpContext.Current.Request在生产中为空

C# HttpContext.Current.Request在生产中为空,c#,.net,wcf,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); } 在我的开

在我的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


有人知道为什么会发生这种情况吗?

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

在生产中,您的应用程序池设置为“集成”。集成不允许您访问
应用程序启动
中的
请求
对象

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

您可以找到有关原因以及如何解决此问题的更多信息

最终,您有两个选择:

  • 将应用程序池切换到经典模式
  • 不要访问应用程序启动中的
    请求
    对象

  • 将评论转化为回答:


    您不应该尝试访问应用程序启动事件中的当前请求。

    是的,生产应用程序托管在IIS上。为什么要尝试在应用程序启动事件中使用当前请求?应用程序可能由请求启动,也可能不由请求启动。@liho1eye。啊!当然!我现在觉得自己很渺小,对不起,我应该删除这个帖子吗?@liho1ye:请添加答案,这样我就可以给你评分了。当然,尽管看起来vcsjones的答案更完整。