响应在此上下文中不可用

本文关键字:上下文 响应 | 更新日期: 2023-09-27 18:01:28

我有问题。在本地一切正常,但在生产服务器中,它总是抛出异常"响应在此上下文中不可用"。有什么问题吗?我注意到,由于global.asax的一些变化,很多人都会遇到这个问题。这是global的代码。Asax,与应用程序启动相关的部分。

    protected void Application_Start() {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
        Application["SystemUser"] = TUser.GetUserByIdentifier("system").UID;
        InitializeSolrInstances();
        SearchIndexer.DoIndex();
        StartRatingTimer();
        SolrManager.RecalculateMostRequested();
    }
    private static void InitializeSolrInstances() {
        SolrConfigurationManager.InitSolrConnection<OfferItemPresenter>(Resources.ApplicationResources.SolrServiceURL + "/offer");
        SolrConfigurationManager.InitSolrConnection<SavedQueryItemPresenter>(Resources.ApplicationResources.SolrServiceURL + "/savedquery");
        SolrConfigurationManager.InitSolrConnection<TopProductsPresenter>(Resources.ApplicationResources.SolrServiceURL + "/topproducts");
        SolrConfigurationManager.InitSolrConnection<TopSellersPresenter>(Resources.ApplicationResources.SolrServiceURL + "/topsellers");
        SolrConfigurationManager.InitSolrConnection<MostRequestedItemPresenter>(Resources.ApplicationResources.SolrServiceURL + "/mostrequested");
        SolrConfigurationManager.InitSolrConnection<MostRequestedQuery>(Resources.ApplicationResources.SolrServiceURL + "/requestedquery");
    }
    private void StartRatingTimer() {
        _LastRatingRenewedTime = DateTime.Now;
        DateTime CurrentTime = DateTime.Now;
        DateTime StartTime = new DateTime(2011, 1, 1);
        GlobalSettings.ReIndexMainSolrCores(StartTime, CurrentTime);
        Timer OfferAndUserRatingRenewerTimer = new Timer() {
            /*Timer interval for 24 hours*/
            Interval = 24 * 60 * 60 * 1000, Enabled = true };
        OfferAndUserRatingRenewerTimer.Elapsed += new ElapsedEventHandler(OfferAndUserRatingRenewerTimer_Elapsed);
    }
    public void OfferAndUserRatingRenewerTimer_Elapsed(Object Sender, ElapsedEventArgs e) {
        GlobalSettings.ReIndexMainSolrCores(_LastRatingRenewedTime, e.SignalTime);
        _LastRatingRenewedTime = e.SignalTime;
    }

我根本不使用HttpContext的Response或Request属性。既不在global asax本身中,也不在要调用的方法中。帮助我。

这就是它所显示的。`"/"应用程序中的服务器错误。

响应在此上下文中不可用。

描述:当前web请求执行过程中出现未处理的异常。请查看堆栈跟踪以获得有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.Web.HttpException: Response is not available in this context.

源错误:

在执行当前web请求期间生成了一个未处理的异常。有关异常的来源和位置的信息可以使用下面的异常堆栈跟踪来识别。

堆栈跟踪:

[HttpException (0x80004005): Response is not available in this context.]
   System.Web.Util.HttpEncoder.get_Current() +11406684
   System.Web.HttpUtility.UrlEncode(String str, Encoding e) +137
   SolrNet.Impl.SolrConnection.<Get>b__0(KeyValuePair`2 input) +89
   SolrNet.Utils.<Select>d__1a`2.MoveNext() +612
   SolrNet.Utils.Func.Reduce(IEnumerable`1 source, TResult startValue, Accumulator`2 accumulator) +393
   SolrNet.Impl.SolrConnection.Get(String relativeUrl, IEnumerable`1 parameters) +908
   SolrNet.Impl.SolrQueryExecuter`1.Execute(ISolrQuery q, QueryOptions options) +195
   SolrNet.Impl.SolrBasicServer`1.Query(ISolrQuery query, QueryOptions options) +176
   SolrNet.Impl.SolrServer`1.Query(ISolrQuery query, QueryOptions options) +176
   TebeComSearchEngine.SolrManager.RecalculateMostRequested() in SolrManager.cs:77
   TebeCom.MvcApplication.Application_Start() in Global.asax.cs:101
[HttpException (0x80004005): Response is not available in this context.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +4043621
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375
[HttpException (0x80004005): Response is not available in this context.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11612256
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4842149`

响应在此上下文中不可用

"响应在此上下文中不可用"。有什么问题吗?

你是在IIS7集成应用程序池模式而不是经典模式下运行的。在集成模式下,你不能访问Application_Start中的HttpResponse,任何访问它的尝试都会失败。

这里有一篇博客文章,涵盖了类似的情况,但与HttpRequest。

在对SolrNet代码进行了大量的挖掘和查看之后,他们似乎没有做错任何事情。此外,正如Darin以间接的方式指出的那样,HttpUtility。UrlEncode应该在没有HttpContext的代码中工作得很好,比如控制台应用程序。

然而,正如VinayC在他对Darin的回答的评论中指出的那样:

实际上,它似乎是一个bug。从反射器,实际代码看起来是"if (null != current &&零! =电流。反应,,"…);在哪里Current是当前HTTP上下文。问题这里是响应getter抛出一个异常,而不是返回null

不应该抛出那个过于描述性的异常(毫无疑问,他们试图提供帮助),他们应该只返回null,让空引用异常发生。在这种情况下,它们只是检查空值,所以异常无论如何都不会发生!如果还没有,我会把它作为bug报告。

不幸的是,这对你来说意味着你几乎没有选择,只能在经典模式下运行。从技术上讲,你可以把对TebeComSearchEngine.SolrManager.RecalculateMostRequested()的调用放在application_start中生成的线程中,并延迟其执行,直到应用程序完成启动。据我所知,没有一种方法可以通过编程方式表示应用程序开始时的结束,所以这种方法可能有点混乱。

如果你愿意的话,你可以实现延迟启动机制。与惩罚第一个访问网站的人相比,这似乎不算太糟。

这是一个月前在SolrNet邮件列表中讨论过的。

这是ASP中的一个回归。. NET 4,这里提到了这个bug。

SolrNet的未来版本将取代system . web . httutility . urlencode来解决这个错误。(或者如果你真的需要这个,为什么不分叉源代码并修复它呢?)

编辑:我只是固定。