Ответ в этом контексте недоступен

у меня есть проблема. Локально все работает нормально, но на рабочем сервере он всегда выдает исключение "ответ недоступен в этом контексте". В чем может быть проблема? Я заметил, что многие люди испытывают эту проблему из-за некоторых глобальных изменений.асакс. Вот код 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. Ни в самом глобальном asax, ни в рамках методов быть призванным. Помоги мне.

то, что он показывает. ` Ошибка сервера в приложении"/".

ответ недоступен в этом контексте.

описание: произошло необработанное исключение во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительных сведений об ошибке и где было задано в коде.

Сведения Об Исключении: System.Сеть.HttpException: ответ недоступен в этом контекст.

Ошибка Источник:

необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно определить, используя следующую трассировку стека исключений.

Трассировка Стека:

[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`

3 ответов


после того, как много копали и осматривали код SolrNet, они, похоже, не делают ничего плохого. Кроме того,как косвенным образом указал Дарин, методу HttpUtility.UrlEncode должен отлично работать в коде без HttpContext, такого как консольное приложение, и это так.

однако,VinayC указал в своем комментарии на этот ответ Дарина:

на самом деле, это, кажется, ошибка. От отражатель, фактический код являющийся "если (нуль != current & & null != текущий.Ответ. && ..)" где current-текущий контекст http. Вопрос вот что ответ getter бросает исключение, вместо возврата null

вместо того, чтобы выбрасывать это чрезмерно описательное исключение (без сомнения, они пытались быть полезными), они должны были просто вернуть null и позволить нулевым ссылочным исключениям произойти. В этом случае они просто проверяли наличие нулей, поэтому исключения не произошло бы в любом случае! Я сообщу об этом как об ошибке, если ее еще не было.

к сожалению, это означает, что у вас нет выбора, кроме как работать в классическом режиме. Технически вы можете позвонить в TebeComSearchEngine.SolrManager.RecalculateMostRequested() в потоке, который вы порождаете в application_start и отложить его выполнение до тех пор, пока приложение не завершит запуск. Насколько я знаю, нет надежного способа программно сигнализировать о завершении запуска приложения, поэтому этот подход может быть немного грязный.

Если вы готовы к этому, вы, вероятно,могли бы получить этот механизм отложенного запуска. По сравнению с наказанием первого посетителя сайта, это не кажется слишком плохим.


'ответ недоступен в этом контексте'. В чем может быть проблема?

вы работаете в режиме интегрированного пула приложений IIS7 вместо классического режима. В интегрированном режиме у вас нет доступа к HttpResponse в Application_Start любая попытка доступа к нему будет взорвана.

здесь блоге который охватывает аналогичную ситуацию, но с HttpRequest.


Это обсуждалось около месяца назад в списке рассылки SolrNet.

это регрессия в ASP.NET 4,вот упоминание об этой ошибке.

будущий выпуск SolrNet будет заменить систему.Сеть.Методу HttpUtility.Функция urlencode чтобы обойти эту ошибку. (или, если вам действительно это нужно, почему бы не развить исходный код и восстановить ее?)

редактировать: я только что исправил это.