繁体   English   中英

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

[英]Task Canceled exception on RavenDB when creating indexes

我在尝试在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 {“任务被取消。”}数据:{System.Collections.ListDictionaryInternal} Etag:null HResult:-2146233088 HelpLink:null InnerException:null消息:“任务已取消。” 响应:{StatusCode:503,ReasonPhrase:'Service Unavailable',版本:1.1,内容:,标题:{}} 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__38 1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Implementation\\\\HttpJsonRequest.cs:line 312 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Implementation.HttpJsonRequest.<ReadResponseJsonAsync>d__35.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Implementation\\\\HttpJsonRequest.cs:line 221 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Async.AsyncServerClient.<>c__DisplayClass69_0.<<GetIndexAsync>b__0>d.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Async\\\\AsyncServerClient.cs:line 726 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.ReplicationInformerBase 1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Implementation\\\\HttpJsonRequest.cs:line 312 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Implementation.HttpJsonRequest.<ReadResponseJsonAsync>d__35.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Implementation\\\\HttpJsonRequest.cs:line 221 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Async.AsyncServerClient.<>c__DisplayClass69_0.<<GetIndexAsync>b__0>d.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Async\\\\AsyncServerClient.cs:line 726 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.ReplicationInformerBase 1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Implementation\\\\HttpJsonRequest.cs:line 312 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Implementation.HttpJsonRequest.<ReadResponseJsonAsync>d__35.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Implementation\\\\HttpJsonRequest.cs:line 221 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Async.AsyncServerClient.<>c__DisplayClass69_0.<<GetIndexAsync>b__0>d.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\Async\\\\AsyncServerClient.cs:line 726 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.ReplicationInformerBase 1.d__34 1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\ReplicationInformerBase.cs:line 417 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Raven.Client.Connection.ReplicationInformerBase 1.d__33的1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\ReplicationInformerBase.cs:line 417 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Raven.Client.Connection.ReplicationInformerBase 1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\ReplicationInformerBase.cs:line 316 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Async.AsyncServerClient.<ExecuteWithReplication>d__164 1.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Client.Lightweight\\\\Connection\\\\ReplicationInformerBase.cs:line 316 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Raven.Client.Connection.Async.AsyncServerClient.<ExecuteWithReplication>d__164 1.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_1 1.<<RunSync>b__0>d.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Abstractions\\\\Util\\\\AsyncHelpers.cs:line 75 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Raven.Abstractions.Util.AsyncHelpers.RunSync[T](Func 1任务)的1.<<RunSync>b__0>d.MoveNext() in C:\\\\Builds\\\\RavenDB-Stable-3.5\\\\Raven.Abstractions\\\\Util\\\\AsyncHelpers.cs:line 75 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Raven.Abstractions.Util.AsyncHelpers.RunSync[T](Func C:\\ Builds \\ RavenDB-Stable-3.5 \\ Raven.Abstractions \\ Util \\ AsyncHelpers.cs:第89行,位于C:\\ Bu中的Raven.Client.Connection.ServerClient.GetIndex(String name) 在C:\\ Builds \\ RavenDB-Stable-中的ilds \\ RavenDB-Stable-3.5 \\ Raven.Client.Lightweight \\ Connection \\ ServerClient.cs:第222行\\ at Raven.Client.Indexes.AbstractIndexCreationTask.Execute(IDatabaseCommands databaseCommands,DocumentConvention documentConvention) 3.5 \\ Raven.Client.Lightweight \\ Indexes \\ AbstractIndexCreationTask.cs:位于C:\\ Builds \\ RavenDB-Stable-3.5 \\ Raven.Client.Lightweight \\ DocumentStoreBase.cs中Raven.Client.DocumentStoreBase.ExecuteIndex(AbstractIndexCreationTask indexCreationTask)的第304行:位于C:\\ Builds \\ RavenDB-Stable-3.5 \\ Raven.Client.Lightweight \\ Indexes \\ AbstractIndexCreationTask.cs中的Raven.Client.Indexes.AbstractIndexCreationTask.Execute(IDocumentStore商店)第102行:Persistence.Database.Adapter.RavenDb第221行位于\\ my \\ route \\ Persistence.Database.Adapter \\ RavenDb \\ RavenDbDocumentStoreFactory.cs中的.RavenDbDocumentStoreFactory.CreateIndexes(IDocumentStore documentStore):Persistence.Database.Adapter.RavenDb.RavenDbDocumentStoreFactory.ConfigureDocumentStore中的第50行(IDocumentStore文档 在\\ my \\ route \\ Persistence.Database.Adapter \\ RavenDb \\ RavenDbDocumentStoreFactory.cs中的第38行:位于\\ my \\ route \\ Persistence.Database中Persistence.Database.Adapter.RavenDb.RavenDbDocumentStoreFactory.Create(String ravenDbLocation,String ravenDbDatabase)的第38行.Adapter \\ RavenDb \\ RavenDbDocumentStoreFactory.cs:位于Persistence.Database的\\ my \\ route \\ Persistence.Database.Adapter \\ PersistenceAdapter.cs:第53行的Persistence.Database.Adapter.PersistenceAdapter。<。ctor> b__8_0()中的第22行。适配器.PersistenceAdapter.RegisterRavenDbUtilities()位于\\ my \\ route \\ Persistence.Database.Adapter \\ PersistenceAdapter.cs:第175行,位于\\ my \\ route \\ Persistence.Database.Adapter \\ PersistenceAdapter中的Persistence.Database.Adapter.PersistenceAdapter.RegisterRavenLogic() .cs:位于\\ my \\ route \\ Persistence.Database.Adapter \\ PersistenceAdapter.cs中的Persistence.Database.Adapter.PersistenceAdapter.Initialize()的第86行:位于\\ my \\ route中的My-Program.ConfigurePersistentAdapter(设置设置)的第74行\\ MessageQueueListener \\ MessageQueueListenerService.c s:My-Program.AddBootstrapperExtension()的第153行,位于\\ my \\ route \\ net-stock-purchasing-service.MessageQueueListener \\ MessageQueueListenerService.cs:第118行,位于\\ my \\ route \\ net-中的My-Program.Startup() stock-purchasing-service.MessageQueueListener \\ MessageQueueListenerService.cs:第78行“StatusCode:ServiceUnavailable TargetSite:{Void MoveNext()}

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

如果你运行RavenDB.Client从3.0.30000到3.0.30179,那么它应该工作。

如果您运行的是更高版本,则会遇到(在某些情况下)此异常。 要解决此问题,您可以使用备用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应用程序中。

这解决了我的问题:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM