Невозможно подключиться к базе данных Mongo с базой данных Azure Cosmos - PullRequest
0 голосов
/ 26 октября 2018

Я создал базу данных Cosmos DB в Azure и использовал Mongo API. Я создал клиента и настроил так -

_mongoDbConnectionString = configuration["MongoDBConnectionString"];
_databaseName = configuration["MongoDBName"];
_client = new MongoClient(_mongoDbConnectionString);
_database = _client.GetDatabase(_databaseName);
_collectionName = configuration["MongoDBCollectionName"];

Затем пытается записать данные-

_database.GetCollection<dynamic>(_collectionName).InsertOne(data);

Сбой при ошибке-

Тайм-аут произошел после 30000 мс при выборе сервера с помощью CompositeServerSelector {Selectors = MongoDB.Driver.MongoClient + AreSessionsSupportedServerSelector, LatencyLimitingServerSelector {AllowedLatencyRange = 00: 00: 00.0150000 }}. Клиентское представление состояния кластера: {ClusterId: "1", ConnectionMode : "ReplicaSet", Тип: "ReplicaSet", Состояние: "Отключено", Серверы: [{ServerId: "{ClusterId: 1, EndPoint: "Unspecified / botframeworkcosmos.documents.azure.com: 10255"} ", Конечная точка: «Не указано / botframeworkcosmos.documents.azure.com: 10255», Состояние: «Отключено», Тип: «Неизвестно», HeartbeatException: "MongoDB.Driver.MongoConnectionException: исключение произошло во время открытие соединения с сервером. ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException: A Попытка подключения не удалась, потому что подключенная сторона не правильно ответить через некоторое время или не удалось установить соединение потому что подключенный хост не смог ответить

Я попробовал это решение - Тайм-аут произошел после 30000 мс при выборе сервера с помощью CompositeServerSelector , но он не работал.

Я также попытался настроить политики SSL, как это, чтобы настроить клиента-

_mongoDbConnectionString = configuration["MongoDBConnectionString"];
_databaseName = configuration["MongoDBName"];
MongoClientSettings settings = MongoClientSettings.FromUrl(
  new MongoUrl(_mongoDbConnectionString)
);
settings.SslSettings =
  new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };
_client = new MongoClient(settings);
_database = _client.GetDatabase(_databaseName);
_collectionName = configuration["MongoDBCollectionName"];

Я все еще получаю ту же ошибку. Что странно, тот же код, он все работал вчера.

Обновление Я удалил базу и создал новую. Все та же проблема.

Есть идеи, в чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Убедитесь, что учитывается:

  1. Строка подключения из среды БД Azure COSMOS
  2. Версия драйвера MongoDB

     private string userName = "FILLME";
            private string host = "FILLME";            
            private string dbName = "Tasks";
            private string collectionName = "TasksList";
    
          private IMongoCollection<MyTask> GetTasksCollection()
          {
            MongoClientSettings settings = new MongoClientSettings();
            settings.Server = new MongoServerAddress(host, 10255);
            settings.UseSsl = true;
            settings.SslSettings = new SslSettings();
            settings.SslSettings.EnabledSslProtocols = SslProtocols.Tls12;
    
            MongoIdentity identity = new MongoInternalIdentity(dbName, userName);
            PasswordEvidence evidence = new PasswordEvidence(password);
            settings.Credential = new MongoCredential("SCRAM-SHA-1", identity, evidence);
            MongoClient client = new MongoClient(settings);
            var database = client.GetDatabase(dbName);
            var todoTaskCollection = database.GetCollection<MyTask>(collectionName);
            return todoTaskCollection;
        }
    
         public List<MyTask> GetAllTasks()
         {
           try
           {
            var collection = GetTasksCollection();
            return collection.Find(new BsonDocument()).ToList();
            }
            catch (MongoConnectionException ex)
            {
              return new List<MyTask>();
            }
          }
    
0 голосов
/ 14 мая 2019

У меня было то же сообщение об ошибке (A timeout occured after 30000ms с Unspecified также упоминалось).Это произошло потому, что брандмауэр моей компании блокировал исходящие соединения через порт Cosmos Mongo, например, TCP 10255.

Я проверил это, временно запустив код за пределами сети нашей компании, и ошибка исчезла (я убедился, что когда яперезапустил его снова внутри сети компании, но все равно не получилось).

Поэтому добавление правила сетевого брандмауэра для разрешения исходящих подключений к TCP-порту 10255 должно исправить это.

...