Замок MonoRail с исключением асинхронного рендеринга вида действий

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

Я также попытался вызвать RenderView ("uploadTags.vm") в EndUploadTags. Когда я вызываю RenderText (s) в EndUploadTags, я не получаю исключения.

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

   [NullReferenceException: Object reference not set to an instance of an object.]
   Castle.MonoRail.Framework.Services.DefaultCacheProvider.Get(String key) +163
   Castle.MonoRail.Framework.Views.NVelocity.CustomResourceManager.GetResource(String resourceName, ResourceType resourceType, String encoding) +68
   NVelocity.Runtime.RuntimeInstance.GetTemplate(String name, String encoding) +57
   NVelocity.Runtime.RuntimeInstance.GetTemplate(String name) +82
   NVelocity.App.VelocityEngine.GetTemplate(String name) +47
   Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine.Process(String viewName, TextWriter output, IEngineContext context, IController controller, IControllerContext controllerContext) +564
   Castle.MonoRail.Framework.Services.DefaultViewEngineManager.Process(String templateName, TextWriter output, IEngineContext context, IController controller, IControllerContext controllerContext) +237
   Castle.MonoRail.Framework.Controller.ProcessView() +146
   Castle.MonoRail.Framework.Controller.EndProcess() +1579
   Castle.MonoRail.Framework.BaseAsyncHttpHandler.EndProcessRequest(IAsyncResult result) +141

[MonoRailException: Error processing MonoRail request. Action uploadtags on asyncController vendor]
   Castle.MonoRail.Framework.BaseAsyncHttpHandler.EndProcessRequest(IAsyncResult result) +461
   System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +86

Это мой тестовый код:

        private Output output;
        public delegate string Output();

        private string DoNothing()
        {
            return "nothing";
        }

        private string Upload()
        {
            return "upload";
        }

        public IAsyncResult BeginUploadTags(HttpPostedFile xmlFile, Boolean doUpload)
        {
            if (IsPost)
            {
                output = Upload;
                return output.BeginInvoke(ControllerContext.Async.Callback, null);
            }
            output = DoNothing;
            return output.BeginInvoke(ControllerContext.Async.Callback, null);
        }

        public void EndUploadTags()
        {
            var s = output.EndInvoke(ControllerContext.Async.Result);
            PropertyBag["logging"] = s;
        }

person ZxCvBnM    schedule 30.10.2012    source источник


Ответы (1)


Это ошибка старых версий MonoRail. Он работает в MonoRail 2.1 RC, но не в старой версии, которую я только что пробовал. , У меня такое же исключение с нулевой ссылкой.

Так выглядела ревизия 5688 в Subversion, откуда взялось NullReferenceException. код нет больше использует HttpContext для кеша.

public object Get(String key)
{
    if (logger.IsDebugEnabled)
    {
        logger.DebugFormat("Getting entry with key {0}", key);
    }

    return GetCurrentContext().Cache.Get(key);
}

private static HttpContext GetCurrentContext()
{
    return HttpContext.Current;
}
person Jonathon Rossi    schedule 30.10.2012
comment
Это не ответ на вопрос. Вы только запрашиваете более подробную информацию, пожалуйста, используйте комментарий для такого запроса - person greydet; 30.10.2012
comment
Извините, я пробовал, но не могу найти, как это сделать. Может быть, меня ограничивает моя низкая репутация? Да, у меня нет 50 респондентов (meta .stackexchange.com / questions / 117496 /). - person Jonathon Rossi; 30.10.2012
comment
Ведение журнала настраивается следующим образом: container.AddFacility (ведение журнала, новый LoggingFacility (LoggerImplementation.Log4net, log4net.config)); - person ZxCvBnM; 30.10.2012
comment
Пожалуйста, посмотрите мой обновленный ответ, это не имеет ничего общего с ведением журнала, а с версией MonoRail, в которой был дефект с асинхронными действиями. - person Jonathon Rossi; 31.10.2012