2012-10-30 4 views
0

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

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

StackTrace:

[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; 
     } 

ответ

2

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

Это то, что ревизия 5688 выглядела как в Subversion, откуда и исходит NullReferenceException. code больше не использует 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; 
} 
+0

Это не настоящий вопрос. Вы только просите более подробную информацию, пожалуйста, используйте комментарий для такого запроса. – greydet

+0

Извините, я попробовал, но не могу найти, как это сделать. Может быть, я ограничен моим низким представителем? Да, у меня нет 50 rep (http://meta.stackexchange.com/questions/117496/missing-add-comment-link-button). –

+0

Ведение журнала настраивается следующим образом: container.AddFacility («logging», new LoggingFacility (LoggerImplementation.Log4net, «log4net.config»)); – ZxCvBnM