我在尝试在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 回答
当RavenDB 3.5发布时,客户端软件包中出现了问题 .
如果您正在运行RavenDB.Client从3.0.30000到3.0.30179,那么它应该可以工作 .
如果您运行的是更高版本,则会遇到(在某些情况下)此异常 . 要解决此问题,您可以使用alternate API:
store.DatabaseCommands.PutIndexes
.这应该可以解决您的问题 .
升级我的客户端软件包后,我遇到了这个问题 . 请注意,异常仅发生在控制台应用程序中,而不是在我的Web应用程序中 .
这解决了我的问题:
在我的情况下,原来是由于ravendb客户端库和已安装的服务器不匹配 . 我的应用程序运行的是最新版本的RavenDB客户端,服务器使用的是3.0版本