Я могу успешно подключиться к кластеру AWS DocumentDB с помощью MongoDB Compass на своем локальном компьютере. Он использует SSH-соединение. Это работает.
Но я изо всех сил пытаюсь подключиться к базе данных из кода C# со своего локального компьютера.
var settings = MongoClientSettings.FromUrl(new MongoUrl("mongodb://master:password@abc-mongo.cluster-xyzxyz.eu-central-1.docdb.amazonaws.com:27017/database?ssl=false&readpreference=secondaryPreferred"));
var client = new MongoClient(settings);
var database = client.GetDatabase("database");
var databases = client.ListDatabases().ToList();
Я получаю ошибку:
A timeout occurred after 30000ms selecting a server using CompositeServerSelector{ Selectors = ReadPreferenceServerSelector{ ReadPreference = { Mode : SecondaryPreferred } }, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 }, OperationsCountServerSelector }. Client view of cluster state is { ClusterId : "1", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/abc-mongo.cluster-xyzxyz.eu-central-1.docdb.amazonaws.com:27017" }", EndPoint: "Unspecified/abc-mongo.cluster-xyzxyz.eu-central-1.docdb.amazonaws.com:27017", ReasonChanged: "Heartbeat", State: "Disconnected", ServerVersion: , TopologyVersion: , Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server.
---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10060): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
URL-адреса Atlas обычно имеют префикс mongodb+srv://
, а не только mongodb://
. Не уверен, относится ли это и к DocumentDB.
Возможно, группа безопасности настроена на разрешение только SSH-соединений, которых вы не делаете в коде.
Вы можете добавить новые правила в свою группу безопасности, чтобы разрешить вам подключаться с IP-адреса вашего локального компьютера, или вы можете следовать этому руководству, которое учит, как подключаться с помощью ssh из локального кода. Я не проверял то, что написано в руководстве, так как у меня нет базы данных documentdb и я не знаю, как она настроена.
Какой порт используется протоколом mongodb и открыт ли он на всем пути между вами и AWS? Контролировали ли вы межсетевые экраны и т. д. между ними? О, это в коде 27017 открыто?