[英]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__341.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_11.<<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,那么它应该工作。
如果您运行的是更高版本,则会遇到(在某些情况下)此异常。 要解决此问题,您可以使用备用API : store.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.