首页 文章

任务在创建索引时取消了RavenDB上的异常

提问于
浏览
5

我在尝试在RavenDB 3.5上创建索引时遇到问题

当创建3个以上的索引时,应用程序就会死掉,得到一个

无法连接到远程服务器状态代码:ConnectFailure

索引创建代码非常简单:

private static void CreateIndexes(IDocumentStore documentStore)
    {
        new PurchaseOrder_QueryByExternalReference().Execute(documentStore);
        new SupplierDocument_QueryBySupplierName().Execute(documentStore);
        new ProductDocument_QueryByProductIdAndName().Execute(documentStore);
        new PurchaseOrderLine_QueryableIndex().Execute(documentStore);
        new PurchaseOrderLine_ForPurchaseOrderIndex().Execute(documentStore);
    }

但如果是这样的话也会发生

IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly,store);

方法被调用 . 任何订单上的列表中的任何3个索引都会发生这种情况 .

完整的堆栈跟踪是这样的:

exception {“任务被取消 . ”}数据: Etag:null HResult:-2146233088 HelpLink:null InnerException:null消息:“任务已取消 . ”响应:{StatusCode:503,ReasonPhrase:'Service Unavailable',版本:1.1,内容:, Headers :{}} ResponseString:“无法连接到远程服务器状态代码:ConnectFailure”来源:“Raven.Client.Lightweight” StackTrace:“在Raven.Client.Connection.Implementation.HttpJsonRequest . <> c__DisplayClass36_0 . <b__0> d.MoveNext()在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ Implementation \ HttpJsonRequest中 . cs:第258行---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处Raven.Client.Connection.Implementation.HttpJsonRequest.d__381.MoveNext()在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ Implementation \ HttpJsonRequest.cs:第312行 - - 从抛出异常的先前位置开始的堆栈跟踪结束---在System.Runtime.CompilerServ位于C:\ Builds \的Raven.Client.Connection.Implementation.HttpJsonRequest . <ReadResponseJsonAsync> d__35.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的ices.TaskAwaiter.ThrowForNonSuccess(任务任务) RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ Implementation \ HttpJsonRequest.cs:第221行---从抛出异常的上一个位置开始的堆栈跟踪---在System.Runtime.CompilerServices上 . 位于Raven.Client.Connection.Async.AsyncServerClient的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的TaskAwaiter.ThrowForNonSuccess(任务任务) . <> c__DisplayClass69_0 . << GetIndexAsync> b__0> d.MoveNext()在C: \构建\ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ Async \ AsyncServerClient.cs:第726行---从抛出异常的上一个位置开始的堆栈跟踪---在系统中System.Runtime上的.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)位于C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ ReplicationInformerBase中的Raven.Client.Connection.ReplicationInformerBase1.d__341.MoveNext()中的.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) .cs:第417行 - 从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)的Raven.Client.Connection.ReplicationInformerBase1.d__331.MoveNext()在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ ReplicationInformerBase.cs:第316行---从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificatio的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处n(任务任务)在Raven.Client.Connection.Async.AsyncServerClient . <ExecuteWithReplication> d__1641.MoveNext()在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ Async \ AsyncServerClient.cs中:第0行---从抛出异常的先前位置开始的堆栈跟踪结束---在Raven的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) . Abstractions.Util.AsyncHelpers . <> c__DisplayClass1_11 . << RunSync> b__0> d.MoveNext()在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Abstractions \ Util \ AsyncHelpers.cs:第75行---抛出异常的前一个位置的堆栈跟踪结束---在C:\中的Raven.Abstractions.Util.AsyncHelpers.RunSync [T](Func1任务)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处构建\ RavenDB-Stable-3.5 \ Raven.Abstractions \ Util \ AsyncHelpers.cs:第89行,位于C:\ Builds \ Rav中的Raven.Client.Connection.ServerClient.GetIndex(String name) enDB-Stable-3.5 \ Raven.Client.Lightweight \ Connection \ ServerClient.cs:第222行\ at Raven.Client.Indexes.AbstractIndexCreationTask.Execute(IDatabaseCommands databaseCommands,DocumentConvention documentConvention)inC:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Indexes \ AbstractIndexCreationTask.cs:位于C:\ Builds \ RavenDB-Stable-3.5 \ Raven中Raven.Client.DocumentStoreBase.ExecuteIndex(AbstractIndexCreationTask indexCreationTask)的第304行.Client.Lightweight \ DocumentStoreBase.cs:位于C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Indexes \ AbstractIndexCreationTask.cs中的Raven.Client.Indexes.AbstractIndexCreationTask.Execute(IDocumentStore商店)第102行:line在Persistence.Database.Database.DavenDb.RavenDbDocumentStoreFactory.ConfigureDocumentStore中的\ my \ route \ Persistence.Database.Adapter \ RavenDb \ RavenDbDocumentStoreFactory.cs:第50行的Persistence.Database.Adapter.RavenDb.RavenDbDocumentStoreFactory.CreateIndexes(IDocumentStore documentStore)中的221 IDocumentStore documentStore)在\ my \ route \ Persistence.Database.Adapter \ RavenDb \ RavenDbDocumentStoreFactory.cs:第38行的Persistence.Database.Adapter.RavenDb.RavenDbDocumentStoreFactory.Create(String ravenDbLocation,String ravenDbDatabase)in my \ route \ Persistence.Database.Adapter \ RavenDb \ RavenDbDocumentStoreFactory.cs:位于\ my \ route \ Persistence.Database.Adapter \ PersistenceAdapter.cs中Persistence.Database.Adapter.PersistenceAdapter . < . ctor> b__8_0()的第22行:位于\ my \ route \ Persistence.Database.Adapter \ PersistenceAdapter.cs中的Persistence.Database.Adapter.PersistenceAdapter.RegisterRavenDbUtilities()的第53行:位于\ my \ route \中Persistence.Database.Adapter.PersistenceAdapter.RegisterRavenLogic()的第175行Persistence.Database.Adapter \ PersistenceAdapter.cs:位于\ my \ route \ Persistence.Database.Adapter \ PersistenceAdapter.cs中的Persistence.Database.Adapter.PersistenceAdapter.Initialize()的第86行:My-Program.ConfigurePersistentAdapter中的第74行(设置位于\ my \ route \ MessageQueueListener \ MessageQueueListenerService.cs的第153行:位于我的程序中的My-Program.AddBootstrapperExtension(),位于\ my \ route \ net-stock-purchasing-service.MessageQueueListener \ MessageQueueListenerService.cs:My-Program第118行 . \ _ \ route \ net-stock-purchasing-service.M中的.Startup() essageQueueListener \ MessageQueueListenerService.cs:第78行“StatusCode:ServiceUnavailable TargetSite:{Void MoveNext()}

3 回答

  • 0

    当RavenDB 3.5发布时,客户端软件包中出现了问题 .

    如果您正在运行RavenDB.Client从3.0.30000到3.0.30179,那么它应该可以工作 .

    如果您运行的是更高版本,则会遇到(在某些情况下)此异常 . 要解决此问题,您可以使用alternate APIstore.DatabaseCommands.PutIndexes .

    var indexes = new List<AbstractIndexCreationTask>();
    indexes.Add(new MyIndex1());
    indexes.Add(new MyIndex2());
    indexes.Add(new MyIndex....());
    
    var transfos = new List<AbstractTransformerCreationTask>();
    transfos.Add(new MyTransformer1());
    transfos.Add(new MyTransformer2());
    transfos.Add(new MyTransformer...());
    
    // put indexes in 1 command
    var indexesToPut = IndexCreation.CreateIndexesToAdd(indexes, documentStore.Conventions);
    documentStore.DatabaseCommands.PutIndexes(indexesToPut);
    
    // don't forget transformers
    foreach (var item in transfos)
    {
        item.Execute(Store);
    }
    

    这应该可以解决您的问题 .

    升级我的客户端软件包后,我遇到了这个问题 . 请注意,异常仅发生在控制台应用程序中,而不是在我的Web应用程序中 .

  • 1

    这解决了我的问题:

    var indexes = IndexCreation.CreateIndexesToAdd(new List<AbstractIndexCreationTask> {...}, store.Conventions);
    
    var alreadyExisting = store.DatabaseCommands.GetIndexes(0, 128)
                .ToDictionary(i => i.Name);
    
    foreach (var index in indexes.Where(i => !alreadyExisting.ContainsKey(i.Name)))
        store.DatabaseCommands.PutIndex(index.Name, index.Definition);
    
    store.DatabaseCommands.PutIndexes(indexes);
    
  • 4

    在我的情况下,原来是由于ravendb客户端库和已安装的服务器不匹配 . 我的应用程序运行的是最新版本的RavenDB客户端,服务器使用的是3.0版本

相关问题