2016-12-14 5 views
1

Следующий код работает так, как должен, если сервер работает, и если имя и пароль правильные. Однако, если я даю неправильное имя пользователя или пароль, он не дает мне обратной связи, но работает только при тайм-ауте при вызове метода Count.Аутентификация пользователя на MongoDB с помощью .NET Driver 2.4

MongoClientSettings setts = new MongoClientSettings() 
        { 
         Server = new MongoServerAddress("127.0.0.1", 27017), 
         Credentials = new MongoCredential[] { MongoCredential.CreateCredential("TestDatabase", "username", "password") } 
        }; 
this.client = new MongoClient(setts);  
this.client.Cluster.DescriptionChanged += this.ClusterDescriptionChanged; 
var database = this.client.GetDatabase("TestDatabase"); 
var collection = database.GetCollection<BsonDocument>("SimpleCollection"); 
var count = collection.Count(MongoDB.Driver.FilterDefinition<BsonDocument>.Empty); 

Как я получаю сообщения об ошибках из драйвера и как я могу проверить, если это соединение, пользователь или пароль, который не подходит?

PS: API-интерфейс драйвера сильно изменился с 2,0 в январе 2016 года, что означает, что большинство веб-учебных материалов и сообщений на этом сайте больше не работают для текущей версии.

ответ

0

После того, как вы получите клиент, вы можете проверить, если соединение успешно

var server = client.GetServer(); 
server.Ping(); 

Кроме того, это всегда хорошая идея, чтобы вложить свой код в попытке поймать с тайм-аутом исключением, потому что, как ожидается.

для получения дополнительной информации по этому вопросу вы можете обратиться MongoDB C# Driver check Authentication status & Role

+1

Благодаря вашему ответ. Мой клиент не имеет метода GetServer(). На какую версию вы ссылаетесь? Приведенный вами пример не предлагает решения. Указанный «auth failed» -Text не является частью исключения. Теперь его просто тайм-аут, и я до сих пор не могу понять, плохо ли пароль или кто-то отрезал кабель. – Otterprinz

+0

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

+1

'client.GetServer()' является частью драйвера v.1. и был удален в v.2 – Sammy

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