2008-10-11 7 views
2

J'utilise Lucene.Net dans une application ASP.NET sur un hôte partagé. Vous avez cette trace de pile ci-dessous. Quel est le travail autour?Lucene.Net échoue sur mon hôte car il appelle GetTempPath(). Quel est le travail autour?

[SecurityException:. Demande d'autorisation de type 'System.Security.Permissions.EnvironmentPermission, de mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' a échoué] System.Security.CodeAccessSecurityEngine.Check (la demande d'objets, StackCrawlMark & stackMark, Boolean isPermSet) +0 System.Security.CodeAccessPermission.Demand() +59 System.IO.Path.GetTempPath() +54 Lucene.Net.Store.FSDirectory..cctor() + 73

Répondre

2

Voici la réponse à ma propre question. La solution a été de modifier Lucene.Net.Store.FSDirectory, en commentant cette ligne inutilisée:

// Comments out by Corey Trager, Oct 2008 to workaround permission restrictions at shared host. This is not used. 
//  public static readonly System.String LOCK_DIR = SupportClass.AppSettings.Get("Lucene.Net.lockDir", System.IO.Path.GetTempPath()); 

Il y avait un obstacle plus d'autorisation de sécurité après cela, et est ici que solution aussi. Je ne comprends pas pourquoi une façon d'obtenir les noms de fichiers dans un répertoire serait bloquée, et une autre façon pas bloquée.

public override System.String[] List() 
    { 

/* Changes by Corey Trager, Oct 2008, to workaround permission restrictions at shared host */ 
      System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(directory.FullName); 
      System.IO.FileInfo[] files = dir.GetFiles(); 
      string[] list = new string[files.Length]; 
      for (int i = 0; i < files.Length; i++) 
      { 
       list[i] = files[i].Name; 
      } 
      return list; 
/* end of changes */ 

//   System.String[] files = SupportClass.FileSupport.GetLuceneIndexFiles(directory.FullName, IndexFileNameFilter.GetFilter()); 
//   for (int i = 0; i < files.Length; i++) 
//   { 
//    System.IO.FileInfo fi = new System.IO.FileInfo(files[i]); 
//    files[i] = fi.Name; 
//   } 
//   return files; 
     } 
Questions connexes