在Azure辅助角色中使用Lucene.NET抛出未处理的异常

时间:2012-06-27 07:21:48

标签: c# asp.net azure lucene.net azure-worker-roles

我正在尝试创建一个Azure工作者角色,用于索引Lucene.NET中的文档。

但是,当我创建IndexWriter时,它会失败并出现以下异常:

System.ExecutionEngineException was unhandled
Message: An unhandled exception of type 'System.ExecutionEngineException'
         occurred in mscorlib.dll

如果我将项目构建为.exe,那么一切正常 - 不会抛出任何异常。我使用的是.NET Framework 4.0。

我的代码:

var cloudAccount = CloudStorageAccount.FromConfigurationSetting("LuceneBlobStorage");
var cacheDirectory = new RAMDirectory();
var azureDirectory = new AzureDirectory(
                                cloudAccount,"SnowballIndex", cacheDirectory);
var analyzer = new SnowballAnalyzer("English");

// !-- Exception thrown after this call
this.indexWriter = new IndexWriter(
             azureDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);

任何想法都将不胜感激。我在网上搜索,一无所获。

感谢。

2 个答案:

答案 0 :(得分:0)

我刚刚使用我的工作人员使用确切的代码进行了测试(仅使用标准分析器,并且创建了辅助角色DLL而没有任何问题。如果这可能是使用自定义分析器的问题,请您尝试隔离吗?也是偶然的,你在同一台机器上安装了.net 4.5吗?

如果您可以提供您的工作者角色项目,我很乐意看看,看看会出现什么问题。

编辑于06/28/2012

在基于SDK 1.6的辅助角色中,我只安装 Lucene.Net.Store.Azure 包,然后在OnStart()函数中添加以下代码,并且没有错误:

StorageCredentialsAccountAndKey creds = new StorageCredentialsAccountAndKey(_azure_storage_name_, _azure_storage_key);
CloudStorageAccount cloudAccount = new CloudStorageAccount(creds, true);
Lucene.Net.Util.Version version = Lucene.Net.Util.Version.LUCENE_29;
var cacheDirectory = new RAMDirectory();
IndexWriter indexWriter = null;
AzureDirectory azureDirectory = new AzureDirectory(cloudAccount, "SnowballIndex", cacheDirectory);
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
indexWriter = new IndexWriter(azureDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED); 

我认为您的问题可能是特定于机器的,因为没有错误且工作者角色运行良好。

答案 1 :(得分:0)

鉴于blob容器名称应为小写http://msdn.microsoft.com/en-us/library/windowsazure/dd135715.aspx

尝试将目录/索引名称从“SnowballIndex”更改为类似“snowball-index”的内容。