Ленивый поиск RavenDB выдает URI слишком длинное исключение - PullRequest
0 голосов
/ 04 ноября 2011

Насколько я понимаю, ленивый поиск в raven db использует multiget, который использует post, а не get. Следовательно, ограничения длины URI не накладываются. Но с помощью следующего неудачного теста я выполняю запрос лениво и все еще получаю URI слишком длинное исключение. Что мне не хватает?

note: Мне нужно использовать Linq для построения предикатов.

    [Test]
    public void UseLongUriForLazySearch()
    {
        BuilderSetup.DisablePropertyNamingFor<User, string>(x => x.Id);
        const int totalUsers = 2000;
        var users = Builder<User>.CreateListOfSize(totalUsers).All()
            .With(x => x.FirstName = GetRandom.FirstName())
            .With(x => x.LastName = GetRandom.LastName())
            .Build();

        using (GetNewServer())
        using (var store = new DocumentStore { Url = _serverAddress }.Initialize())
        {
            using (var session = store.OpenSession())
            {
                foreach (var user in users)
                    session.Store(user);

                session.SaveChanges();
            }

            using(var session = store.OpenSession())
            {
                var ids = new List<string>();
                var added = 0;
                const int needed = 1900;
                const int limit = 1024;
                while (added < needed)
                {
                    ids.AddRange(session.Query<User>().Select(x => x.Id).Skip(added).Take(needed - added).ToList());
                    added += limit;
                }

                var query = session.Query<User>().Where(x => x.Id.In(ids));

                RavenQueryStatistics stats;
                var results = query.Statistics(out stats).Skip(10).Take(100).Lazily();

                Assert.AreEqual(100, results.Value.ToList().Count);

                Assert.AreEqual(needed, stats.TotalResults);
            }
        }
    }

Я добавляю полную трассировку стека для всех, кто интересуется. Я использую build 499.

System.UriFormatException: неверный URI: слишком длинная строка Uri.

Трассировка стека серверов: в System.Uri.EscapeString (ввод строки, начало Int32, конец Int32, Char [] dest, ref Int32 destPos, логическое значение isUriString, char force1, Char force2, Char rsvd) в System.Uri.EscapeUriString (String stringToEscape) в Raven.Abstractions.Data.IndexQuery.AppendQueryString (путь StringBuilder) в c: \ Builds \ raven \ Raven.Abstractions \ Data \ IndexQuery.cs: строка 138 в Raven.Client.Document.Batches.LazyQueryOperation 1.CraeteRequest() in c:\Builds\raven\Raven.Client.Lightweight\Document\Batches\LazyQueryOperation.cs: line 26 at Raven.Client.Document.DocumentSession.<ExecuteLazyOperationsSingleStep>b__9(ILazyOperation x) in c:\Builds\raven\Raven.Client.Lightweight\Document\DocumentSession.cs: line 618 at System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext () на System.Linq.Buffer 1..ctor(IEnumerable 1 источник) в System.Linq.Enumerable.ToArray (IEnumerable 1 source) at Raven.Client.Document.DocumentSession.ExecuteLazyOperationsSingleStep() in c:\Builds\raven\Raven.Client.Lightweight\Document\DocumentSession.cs: line 618 at Raven.Client.Document.DocumentSession.ExecuteAllPendingLazyOperations() in c:\Builds\raven\Raven.Client.Lightweight\Document\DocumentSession.cs: line 595 at Raven.Client.Document.DocumentSession.<>c__DisplayClass5 1.b__3 () в c: \ Builds \ raven \ Raven.Client.Lightweight \ Document \ DocumentSession.cs: строка 566 at System.Lazy`1.CreateValue ()

...