代码之家  ›  专栏  ›  技术社区  ›  Tom Aalbers

RavenDB-4:系统。ArgumentOutOfRangeException:位置不能为负,但为-4554

  •  1
  • Tom Aalbers  · 技术社区  · 6 年前

    我在试图搜索一些数据及其RavenDB附件时遇到了这个错误,但我真的不明白出了什么问题。

    System.ArgumentOutOfRangeException: Position cannot be negative, but was -4554 
    Parameter name: pos
    

    var data = (await Session.Query<MyClass>()
                        .Where(x => x.Workspace == CurrentWorkspace)
                        .Search(x => x.Number, $"*{SearchQuery}*", options: SearchOptions.And)
                        .OrderByDescending(x => x.CreatedAt)
                        .Skip(skip)
                        .Take(take)
                        .ToListAsync())
                    .Select(x => x.LoadAttachments<MyClass>(Session))
                    .Select(Mapper.Map<MyDto>);
    

    此查询用于 search

    但有时我会得到一个 502 Bad Gateway 由于dotnet进程崩溃,此特定终结点出错,api崩溃。它自动重新启动,该端点上的下几个请求正常工作。

    at Sparrow.Json.BlittableJsonReaderBase.ThrowInvalidPosition(System.Int32 pos) in "C:\Builds\RavenDB-Stable-4.0\src\Sparrow\Json\BlittableJsonReaderBase.cs" line 233
    at Sparrow.Json.BlittableJsonReaderObject.TryGetMember(Sparrow.StringSegment name, System.Object& result) in "C:\Builds\RavenDB-Stable-4.0\src\Sparrow\Json\BlittableJsonReaderObject.cs" line 461
    at Sparrow.Json.BlittableJsonReaderObject.TryGet(Sparrow.StringSegment name, T& obj) in "C:\Builds\RavenDB-Stable-4.0\src\Sparrow\Json\BlittableJsonReaderObject.cs" line 244
    at Raven.Client.Documents.Session.DocumentSessionAttachmentsBase.GetNames(System.Object entity) in "C:\Builds\RavenDB-Stable-4.0\src\Raven.Client\Documents\Session\DocumentSessionAttachmentsBase.cs" line 27
    at MyProject.Core.Storage.DocumentStore.DocumentStoreAttachmentExtensions.LoadAttachments(MyProject.Core.Storage.DocumentStore.IDocumentStoreAttachment instance, Raven.Client.Documents.Session.IAsyncDocumentSession session) in "/Users/dtaalbers/Work/dtaalbers/Repos D/MyProject-api/src/MyProject.Core.Storage/DocumentStore/DocumentStoreAttachmentExtensions.cs" line 10
    

    以下是我用来获取RavenDB附件的扩展:

    public static T LoadAttachments<T>(this IDocumentStoreAttachment instance, IAsyncDocumentSession session)
            {
                var attachments = session.Advanced.Attachments.GetNames(instance).ToList();
    
                if (attachments.Any())
                {
                    instance.Attachments = attachments
                        .Where(x => !x.Name.Contains("thumb"))
                        .Select(x => new DocumentStoreAttachment()
                    {
                        ContentType = x.ContentType,
                        Hash = x.Hash,
                        Name = x.Name,
                        Size = x.Size
                    });
                }
    
                return (T) instance;
            }
    

    这是因为RavenDB附件中的数据损坏而可能发生的情况吗?

    此外,每次我获得502时,我的Windows服务器的事件查看器中都会出现一些日志。

    enter image description here

    顶部错误记录如下:

    Faulting application name: dotnet.exe, version: 2.1.26629.5, time stamp: 0x5b36971d
    Faulting module name: coreclr.dll, version: 4.6.26628.5, time stamp: 0x5b356310
    Exception code: 0xc0000005
    Fault offset: 0x00000000001adaf7
    Faulting process id: 0x12cc
    Faulting application start time: 0x01d43964c4023b34
    Faulting application path: C:\Program Files\dotnet\dotnet.exe
    Faulting module path: C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.2\coreclr.dll
    Report Id: a6168db0-a617-11e8-8135-a5deffecc34e
    Faulting package full name: 
    Faulting package-relative application ID: 
    

    底部错误记录此错误;

        Application: dotnet.exe
    CoreCLR Version: 4.6.26628.5
    Description: The process was terminated due to an internal error in the .NET Runtime at IP 00007FFD8250DAF7 (00007FFD82360000) with exit code c0000005.
    

    我不确定它们是否相关,但这一切都发生在同一个API端点上,同时发生。可悲的是,我自己似乎找不到原因。

    感谢您的帮助!

    编辑:

    我使用的是RavenDB服务器版本 4.0.5 .但我把它升级到了 4.1.0-rc-41000 几天前。这两个版本都会发生错误。

    0 回复  |  直到 6 年前
    推荐文章