2015-08-06 12 views
5

MongoDB kimlik doğrulamasını içeren .NET 2.0 sürücüsüne dayalı MongoDB projesi yapıyorum. ben şimdiye kadar karşılaşılanMongo .NET Kimlik Sürücüsü'nde MongoAuthenticationException'ı yakalayın. NET 2.0 Sürücüsü

public static bool createConneciton(string login, SecureString pass, string authDB) { 
    var settings = new MongoClientSettings { 
     Credentials = new[] { 
      MongoCredential.CreateCredential(authDB, login, pass) 
     }, 
     Server = new MongoServerAddress("my.mongodb.server", 27017) 
    }; 
    mongoClient = new MongoClient(settings); 
    return true; 
} 

if (Mongo.createConneciton(textBoxUsername.Text, pass, textBoxAuthDatabase.Text)) 
    Task<BsonDocument> results = Mongo.getNodeStats(); 

public static async Task<BsonDocument> getNodeStats() { 
    try { 
     var db = Mongo.mongoClient.GetDatabase("admin"); 
     var command = new BsonDocument { 
      {"serverStatus",1} 
     }; 
     BsonDocument result = await db.RunCommandAsync<BsonDocument>(command).ConfigureAwait(false); 
       return result; 
    } 
    catch (Exception ex) 
    { 
     Logging.Log(ex); 
     return null; 
    } 
} 

Ana sorun kullanıcının kimlik bilgilerini işleme geçerli: ne yapıyorum için örnek kod bulunmaktadır. Tüm işlemler tembel olduğundan ve bağlantı yalnızca getNodeStats() yönteminde yürütme sırasında açılır. Yani kullanıcı yanlış kimlik bilgilerini yazarsa, o zaman sadece System.Timeout istisna olsa MongoDB.AuthenticationException veya MongoDB.ConnectionException yöntemi yerine 30 saniye beklemek için gidiyor. Eğer istisna metnine bakarsanız, her ikisinin de yükseldiği ancak yakalanmadığı oldukça açıktır.

"MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoAuthenticationException: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1 

ilk düşüncem kullanıcı bunları yazdığınız ve yürütülecek herhangi bir komut için bekleyen ziyade düğmesine bağlamak vurmak en kısa sürede kimlik bilgilerini kontrol etmek açık bir bağlantı zorlamak için, fakat görünen MongoClient sınıf .Open yok() yöntem artık Yani mümkün görünmüyorsa en azından zaman aşımı için beklemek gerek kalmadan AuthenticationException yakalamak istiyorum, ama fikirler dışında nerede denemek ve yakalamak gerekir. Sen MongoCredential.CreateCredential .Arzu kullanarak MongoDB bağlanamaz

+3

Buradan bahsedebilirseniz, bu problem için herhangi bir cevap buldunuz mu? – Mantisen

cevap

1

db bağlamak için MongoCredential.CreateMongoCRCredential yöntemi kullanmak zorunda. Eski kimlik bilgisi SCRAM-SHA-1 mekanizmasının db'ye bağlandığından, .NET'de başarısız olacaktır. Ve açıklamamamın nedeni. MongoCredential.CreateMongoCRCredentialkullanma

, sen MongoDB değişim "authSchema" ayarı vardır. MongoDB-CR Authentication failed