【发布时间】:2018-05-28 12:43:10
【问题描述】:
我正在尝试连接到 MongoDb 数据库。
- 我的客户端:ASP.NET Core 2 和 MongoDb.Driver 2.6.1
- 我的服务器:MongoDb 3.6.5 社区版,独立(无副本集),Windows Server 2016 上的 64 位。
通过连接字符串进行身份验证正在工作:
public MongoDbContext(AppSettings appSettings)
{
var connectionString = "mongodb://myUsername:myPassword@myDomain.com:27017/myDatabaseName";
_client = new MongoClient(connectionString);
// ...
}
MongoClientSettings 的身份验证不工作:
public MongoDbContext(AppSettings appSettings)
{
var credentials = MongoCredential.CreateMongoCRCredential(databaseName: "myDatabaseName", username: "myUsername", password: "myPassword");
var server = new MongoServerAddress(host: "myDomain.com", port: 27017);
var mongoClientSettings = new MongoClientSettings
{
Credential = credentials,
Server = server,
ConnectionMode = ConnectionMode.Standalone,
ServerSelectionTimeout = TimeSpan.FromSeconds(3)
};
_client = new MongoClient(mongoClientSettings);
// ...
}
TimeoutException:使用 CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } } 选择服务器 3000 毫秒后发生超时。集群状态的客户端视图是 { ClusterId : "1", ConnectionMode : "Standalone", Type : "Standalone", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/myDomain. com:27017" }", EndPoint: "Unspecified/myDomain.com:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: 打开与服务器的连接时发生异常. ---> MongoDB.Driver.MongoAuthenticationException:无法在数据库“myDatabaseName”上验证用户名“myUsername”。---> MongoDB.Driver.MongoCommandException:命令验证失败:验证失败。
我对这两种方法都使用了完全相同的值(大写和小写也是如此)。但只有MongoClientSetting 方法会引发异常。不过出于不同的原因,我宁愿使用MongoClientSetting 方法而不是基于连接字符串的方法。
我是否遗漏了什么或者这是 C# 的 MongoDb 驱动程序中的错误?
为了避免误解:在上面的示例中,我将所有真实值(用户名、密码等)换成了假值。
感谢您的帮助!
【问题讨论】: