и с этим патчем MongoDb Driver работает нормально.

даю веб-сайт с использованием ASP.NET Core 2.0 (только что обновлен с версии 1.1 месяц назад). MongoDB также размещается в Mongo Atlas на AWS. Этот экземпляр MongoDB имеет набор из 3 реплик, для подключения требуется SSL, и уже установленный доступ может быть с любого IP.

Он работает вполне нормально на моей машине (Windows 10 x64) и AWS (Windows Server 2016).

Я пытаюсь развернуть его на компьютерах Linux, я использую apt для установкиdotnet-runtime-2.0.0 на Ubuntu Server 16.04, затем я пытаюсь запустить свой сайт, и получил следующую ошибку (из соображений безопасности я скрываю точное доменное имя сервера)

System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = WritableServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-00-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-00-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell..

и две одинаковые ошибки для остальной части набора реплик.

Но я могу успешно подключиться к серверу MongoDB с помощью оболочки MongoDB на той же машине.

Я пропускаю некоторые зависимости от Ubuntu или есть ошибка в MongoDB .NET SDK?

Полная трассировка стека:

System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = WritableServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-00-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-00-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell..
   at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply)
   at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.<ExecuteAsync>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Connections.ConnectionInitializer.<InitializeConnectionAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
   --- End of inner exception stack trace ---
   at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }, { ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-01-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-01-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell..
   at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply)
   at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.<ExecuteAsync>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Connections.ConnectionInitializer.<InitializeConnectionAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
   --- End of inner exception stack trace ---
   at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }, { ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-02-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-02-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell..
   at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply)
   at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.<ExecuteAsync>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Connections.ConnectionInitializer.<InitializeConnectionAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
   --- End of inner exception stack trace ---
   at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }] }.
   at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(IServerSelector selector, ClusterDescription description)
   at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(Task completedTask)
   at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChanged(IServerSelector selector, ClusterDescription description, Task descriptionChangedTask, TimeSpan timeout, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Clusters.Cluster.SelectServer(IServerSelector selector, CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Bindings.WritableServerBinding.GetWriteChannelSource(CancellationToken cancellationToken)
   at MongoDB.Driver.Core.Operations.CreateIndexesOperation.Execute(IWriteBinding binding, CancellationToken cancellationToken)
   at MongoDB.Driver.OperationExecutor.ExecuteWriteOperation[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperation[TResult](IWriteOperation`1 operation, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoCollectionImpl`1.MongoIndexManager.CreateMany(IEnumerable`1 models, CancellationToken cancellationToken)
   at MongoDB.Driver.MongoIndexManagerBase`1.CreateOne(IndexKeysDefinition`1 keys, CreateIndexOptions options, CancellationToken cancellationToken)
 Neil Lunn13 нояб. 2017 г., 09:21
В любом случае, вам нужно посмотреть, какое из них применимо (или оба), и фактически предоставить столько, сколько вы можете, представляя строку соединения, используемую для вашего кода и / или реплики, настройки конфигурации. Последнее можно получить изrs.config() используя оболочку Монго, подключенную к любому экземпляру члена.
 Yashvit06 дек. 2017 г., 11:16
@YankeeYu Я получаю ту же ошибку. Работает все нормально с моей машины для разработки Windows, но выдает ту же ошибку на Linux. Пробовал разные варианты со строкой подключения, но не повезло. Вам удалось это исправить?
 Neil Lunn13 нояб. 2017 г., 09:20
Эта частьCommand isMaster failed: no SNI name sent, говорит нам, что что-то не так с отправляемой строкой соединения или с конфигурацией набора реплик. Если он размещен на Altas и вы использовали инструменты веб-сайта для развертывания набора реплик вместо того, чтобы делать это самостоятельно, то, скорее всего, это строка подключения. Если вы «сделали» свою конфигурацию набора реплик и добавили элементы и конфигурацию вручную, то это также может стать потенциальной проблемой. Вы должны использовать «публичные» IP-адреса или, если быть более точным, назначенные имена в DNS для этих хостов.
 Neil Lunn16 нояб. 2017 г., 03:22
Мы знаем, что такое Атлас. Если у вас нет привилегии, то это просто потому, что используемой учетной записи не хватает привилегии. MongoDB не «блокирует» доступ к этому, так что вам нужно организовать привилегированную учетную запись. Я также говорю вам, что есть несколько «возможных причин». Поэтому, если нет проблем с конфигурацией, проблема с вашим соединением. В любом случае вас попросили"добавить детали к вашему вопросу", что вы еще не сделали. Так что вы смотрите не в том месте. Не Windows против Linux, но "config"
 YankeeYu16 нояб. 2017 г., 02:43
@NeilLunn Спасибо за ответ. Что мне нужно объяснить, так это то, что Mongo Atlas является официальным управляемым сервисом MongoDB, у меня нет привилегий для выполнения команды «rc.config ()». И самая проводная часть - этот проект отлично работает в Windows и Windows Server, но не работает в Linux. Но я могу подключаться и выполнять команды с помощью инструментов командной строки MongoDB в Linux, используя ту же строку подключения MongoDB в моем проекте.

Ответы на вопрос(1)

Решение Вопроса

Следовательно, вы не сможете подключиться к БЕСПЛАТНО Tier MongoDB Atlas.

https://docs.atlas.mongodb.com/driver-connection/#c-net-driver-example

ВАЖНО Приложения, использующие .NET Core в этих операционных системах, не могут подключаться к кластеру Atlas Free Tier.

Проблема отслеживается наDotNet / Corefx GitHub страница.

 Vitaliy Fedorchenko20 мар. 2018 г., 09:37
Поддержка SNI уже реализована в предварительном просмотре .NET Core 2.1:github.com/dotnet/corefx/issues/17427 и с этим патчем MongoDb Driver работает нормально.

Ваш ответ на вопрос