2016-10-25 4 views
1

Вопроса фон:Невозможно подключиться к MongoDB (MongoLabs) через клиент C#

Я имею установку в MongoLabs (MLAB - https://mlab.com/) база данных и добавил очень простую коллекцию. Я использую драйвер MongoDB, чтобы попытаться подключиться и работать с этой коллекцией с помощью драйвера C# 3.2.

выпуска:

Я не могу подключиться к базе данных через драйвер C# с постоянной expection аутентификации, как показано на рисунке:

System.TimeoutException: превышено время ожидания после 30000ms выбора сервер с использованием CompositeServerSelector {Selectors = ReadPreferenceServerSelector {ReadPreference = {Mode = Primary, TagSets = []}}, LatencyLimitingServerSelector {AllowedLatencyRange = 00: 00: 00.0150000}}. Клиентский вид состояния кластера - {ClusterId: "1", ConnectionMode: "Automatic", Type: "Unknown", State: "Disconnected", Servers: [{ServerId: "{ClusterId: 1, EndPoint:" Unspecified/ds048719. mlab.com:48719 «}», EndPoint: «Unspecified/ds048719.mlab.com: 48719», Состояние: «Отключено», Тип: «Неизвестно», «Исключение из сердца»: «MongoDB.Driver.MongoConnectionException: Исключение произошло при открытии . подключение к серверу ---> MongoDB.Driver.MongoAuthenticationException: Не удалось выполнить проверку подлинности через механизм протокола SASL SCRAM-SHA-1 ---> MongoDB.Driver.MongoCommandException:. Команда saslStart не удалась:. Ошибка аутентификации

Код:

Я пробовал несколько разных способов проверки подлинности запроса. В настоящее время я пытаюсь просто использовать MongoClient класс, как показано на рисунке:

MongoClient client; 

var connectionString = "mongodb://userNameGoesHereRemovedForSO:[email protected]:48719/db"; 

client = new MongoClient(connectionString); 

var database = client.GetDatabase("testDB"); 

var collection = database.GetCollection<string>("test"); 

Любая помощь или примеры того, как я могу успешно преодолеть эту проблему аутентификации будет высоко оценен.

ответ

4

Если мне пришлось опасаться догадки, проблема, скорее всего, связана с проблемой межсетевого экрана. Вы должны проверить следующее

  • nslookup хозяина (ds048719.mlab.com) из C# приложения хоста
  • ping хозяина (ds048719.mlab.com) от хоста # Application C (может потерпеть неудачу, в зависимости от настроек mLab)
  • Что ваш IP-адрес whitelisted
  • Проверьте соединение с помощью Mongo Shell с того же хоста, на котором запущено приложение C#. mLab имеет документы here.
  • Проверьте соединение с сырым telnet, например telnet ds048719.mlab.com 48719
  • Убедитесь, что вы используете правильный authenticationDatabase (в вашем примере, это задается /db), это, как правило admin, но может быть ваше имя базы данных, если вы находитесь на общий экземпляр.

Документы можно найти при подключении с помощью драйвера C# в MongoDB C# Driver Docs.Важно отметить следующее:

База данных Компонент

компонент базы данных является необязательным и используется для указания, какие базы данных для проверки подлинности. Когда компонент базы данных не предоставляется, используется база данных «admin».

mongodb://host:27017/mydb

выше, база данных под названием «MyDB», где учетные данные хранятся в приложении.

Примечание:

Некоторые водители используют компонент базы данных, чтобы указать, какие базы данных для работы с по умолчанию. Драйвер .NET при анализе компонента базы данных не использует компонент базы данных для чего-либо иного, кроме аутентификации.

Наконец, я бы предложил в будущем обфускацию имени хоста и порта при отправке в SO. В то время как безопасность только через неясность является плохой политикой, она, безусловно, добавляет уровень защиты для развертывания MongoDB.

0

Возможно, ваша строка подключения неверна. У вас/db в конце, является ли «db» имя вашей базы данных аутентификации?

Убедитесь, что ваша база данных подлинности верна. Если это не так, вы можете удалить его все вместе и позволить ему вернуться к администратору.

+2

Драйвер C# получает ссылку базы данных через метод 'client.GetDatabase'. База данных, указанная в строке подключения, представляет собой 'authenticationDatabase' –

Смежные вопросы