Couchbase Lite 2.1, выпуск репликатора .net - PullRequest
0 голосов
/ 10 января 2019

Мы только что обновили нашу SyncGatewaty до версии 2.1. Так что теперь я рефакторинг нашего клиентского кода для использования CouchbaseLite 2.1. Когда я пытаюсь повторить, я получаю ошибку:

Ошибка LiteCore: не найдено (6/404)

Изначально я получил ошибку при подключении к нашему Dev-серверу, а затем установил локальную копию clean на свой ноутбук, и при попытке подключиться к нему я получаю ту же ошибку.

Вход:

ИНФОРМАЦИЯ) Couchbase 2019-01-10T10: 56: 47.8503147-07: 00 (Запуск) [1] CouchbaseLite / 2.1.2 (.NET; Microsoft Windows 10.0.17763) Build / 13 LiteCore / (15) Commit / 9aebf28

ПРЕДУПРЕЖДЕНИЕ) LiteCore 2019-01-10T10: 56: 48.1943139-07: 00 {C4SocketImpl # 1} ==> class litecore :: repl :: C4SocketImpl ws: //localhost.com: 443 // _ blipsync

ПРЕДУПРЕЖДЕНИЕ) LiteCore 2019-01-10T10: 56: 48.1943139-07: 00 {C4SocketImpl # 1} Неожиданное или нечистое отсоединение разъема! (причина = статус WebSocket, код = 404)

ОШИБКА) Sync 2019-01-10T10: 56: 48.1993137-07: 00 {Repl # 2} ==> class litecore :: repl :: Replicator c: \ temp \ content_meta_data.cblite2 \ -> ws: // локальный: 443 // _ blipsync

ОШИБКА) Sync 2019-01-10T10: 56: 48.1993137-0 7:00 {Repl # 2} Ошибка LiteCore: не найдено (6/404)

Мой код:

using System;
using System.IO;
using Couchbase.Lite;
using Couchbase.Lite.Support;
using Couchbase.Lite.Sync;
using NLog;

namespace ReplicatorExample
{
    public class DatabaseManager
    {
        private static readonly Logger _log = LogManager.GetCurrentClassLogger();
        public const string BUCKET_CONTENT_META_DATA = "content_meta_data";
        private static DatabaseManager _instance;

        public static DatabaseManager GetInstance()
        {
            NetDesktop.Activate();
            NetDesktop.EnableTextLogging("logs");

            return _instance ?? (_instance = new DatabaseManager());
        }

        public void InitializeBuckets()
        {
            try
            {
                var defaultAuthenticator = GetDefaultAuthenticator();

                var dirInfo = new DirectoryInfo($"c:\\temp\\{BUCKET_CONTENT_META_DATA}");
                if (!dirInfo.Parent.Exists)
                {
                    dirInfo.Parent.Create();
                }

                var database = new Database(dirInfo.FullName);

                // Create replicator to push and pull changes to and from the cloud
                var targetEndpoint = new URLEndpoint(new Uri("ws://localhost:4985"));
               var replConfig = new ReplicatorConfiguration(database, targetEndpoint)
                {
                    Authenticator = defaultAuthenticator,
                    Continuous = true,
                    //Channels = new List<string>
                    //{
                    //    "approved",
                    //    
                    //}
                };
                var replicator = new Replicator(replConfig);
                replicator.AddChangeListener((sender, args) =>
                {
                    if (args.Status.Error != null)
                    {
                        _log.Error($"{args.Status.Error}");
                    }
                    else
                    {
                        _log.Debug(args.Status);
                    }
                });
                replicator.Start();
            }
            catch (Exception e)
            {
                _log.Error(e);
            }
        }

        private Authenticator GetDefaultAuthenticator()
        {
            return new BasicAuthenticator("BigD","123456");
        }


    }
}

1 Ответ

0 голосов
/ 14 января 2019

Я считаю, что вам нужно указать имя базы данных в URL для targetEndpoint.

Например: var targetEndpoint = new URLEndpoint(new Uri("ws://localhost:4984/mydatabase"));

...