Couchbase .NET SDK не работает с тестовым контейнером по умолчаниюC#

Место общения программистов C#
Ответить
Anonymous
 Couchbase .NET SDK не работает с тестовым контейнером по умолчанию

Сообщение Anonymous »


Я хочу создать корзину и использовать Couchbase SDK вместе с Testcontainers. При написании базового кода для настройки контейнера и создания бакета я получаю не очень подробное исключение.

Couchbase.Core.Exceptions.KeyValue.SocketNotAvailableException:ChannelConnectionPool в Couchbase.Core.ClusterContext.GetOrCreateBucketLockedAsync (имя строки) в Program.$(String[] args) в \ConsoleApp4\ConsoleApp4\Program.cs:строка 24 Код для воспроизведения: Csproj:

Exe net6.0 включить включить Program.cs
использование Couchbase; использование Testcontainers.Couchbase; const string TestBucketName = "Тест"; CouchbaseContainer CouchbaseContainer = новый CouchbaseBuilder() .Строить(); пытаться { ждут CouchbaseContainer.StartAsync(); вар параметры = новые ClusterOptions { Имя пользователя = CouchbaseBuilder.Имя пользователя по умолчанию, Пароль = CouchbaseBuilder.DefaultPassword, }; вар ConnectionString = CouchbaseContainer.GetConnectionString(); вар кластер = ждут Cluster.ConnectAsync(connectionString, options); вар ведро = ждут кластера.BucketAsync(TestBucketName); коллекция вар = ждут Bucket.DefaultCollectionAsync(); } поймать (Исключение e) { ждут CouchbaseContainer.DisposeAsync(); Console.WriteLine(e); }
Я попробовал создать сегмент из пользовательского интерфейса, и это сработало.

РЕДАКТИРОВАТЬ: Немного покопавшись, я вижу, что основная причина этого в том, что ChannelConnectionPool был удален непосредственно перед тем, как я хочу создать корзину. Это стек вызовов этого метода:

в Couchbase.Core.IO.Connections.Channels.ChannelConnectionPool.Dispose() в Couchbase.Core.ClusterNode.Dispose() в Couchbase.Core.ClusterContext.BootstrapGlobalAsync() в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Objects) в System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext, обратный вызов ContextCallback, состояние объекта) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() в System.Runtime.CompilerServices.TaskAwaiter.c.b__12_0 (Действие InnerContinuation, Task InternalTask) в System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke() в System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction (действие Action, логическое значениеallowInlining) в System.Threading.Tasks.Task.RunContinuations (Продолжение объектаОбъект) в System.Threading.Tasks.Task.FinishContinuations() в System.Threading.Tasks.Task1.TrySetResult (результат TResult) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetExistingTaskResult (Task1task, результат TResult) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetResult (результат TResult) в Couchbase.Core.ClusterNode.GetClusterMap(Nullable1configVersion) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Objects) в System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext, обратный вызов ContextCallback, состояние объекта) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() в System.Runtime.CompilerServices.TaskAwaiter.c.b__12_0 (Действие InnerContinuation, Task InternalTask) в System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke() в System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction (действие Action, логическое значениеallowInlining) в System.Threading.Tasks.Task.RunContinuations (Продолжение объектаОбъект) в System.Threading.Tasks.Task.FinishContinuations() в System.Threading.Tasks.Task1.TrySetResult (результат TResult) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetExistingTaskResult (задача Task1, результат TResult) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetResult (результат TResult) в Couchbase.Core.ClusterNode.ExecuteOp (отправитель Func4, операция IOperation, состояние объекта, CancellationTokenPair tokenPair) в System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext, обратный вызов ContextCallback, состояние объекта) в System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) в System.Threading.ThreadPool.c.b__87_0 (состояние объекта) в Couchbase.Core.IO.Operations.OperationBase.HandleOperationCompleted(SlicedMemoryOwner1& data) в Couchbase.Core.IO.Operations.OperationBase1.Couchbase.Core.IO.Operations.IOperation.HandleOperationCompleted(SlicedMemoryOwner1& data) в Couchbase.Core.IO.AsyncStateBase.SendResponseInternal (ответ объекта) в System.Threading.QueueUserWorkItemCallbackDefaultContext1.Execute() в System.Threading.ThreadPoolWorkQueue.Dispatch() в System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() в System.Threading.Thread.StartCallback() РЕДАКТИРОВАНИЕ 2: Покопавшись еще больше, я обнаружил, что этот фрагмент кода в классе ClusterContext в методе BootstrapGlobalAsync:

if (GlobalConfig.UseAlternateAddresses) { узел.Dispose(); } Это удаление узла. После жесткого присвоения значения false это начало работать.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»