2012-10-30 3 views
0

J'essaie d'utiliser des actions asynchrones dans MonoRail mais lorsque la vue est rendue, j'obtiens une exception NullReference, également testée avec le fichier emtpy view.Castle MonoRail avec affichage d'action asynchrone rendu exception

J'ai également essayé d'appeler RenderView ("uploadTags.vm") dans EndUploadTags. Lorsque j'appelle RenderText (s) dans EndUploadTags je ne reçois pas l'exception.

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 

Ceci est mon code de test:

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

Répondre

2

Ce bogue dans les anciennes versions de monorail. Cela fonctionne dans MonoRail 2.1 RC, mais pas dans une ancienne version que j'ai juste essayé, j'ai eu la même exception de référence nulle.

Voici à quoi ressemblait la révision 5688 dans Subversion, d'où provient le NullReferenceException. Le code n'utilise plus le HttpContext pour le cache.

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

Ceci n'est pas une vraie réponse à la question. Vous ne demandez que plus de détails, s'il vous plaît utiliser un commentaire pour une telle demande – greydet

+0

Désolé, j'ai essayé, mais je ne peux pas trouver comment faire cela. Peut-être que je suis limité par mon bas rep? Oui, je n'ai pas 50 rep (http://meta.stackexchange.com/questions/117496/missing-add-comment-link-button). –

+0

La journalisation est configurée comme suit: container.AddFacility ("logging", nouvelle LoggingFacility (LoggerImplementation.Log4net, "log4net.config")); – ZxCvBnM

Questions connexes