簡體   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