无法通过C#客户端连接到MongoDB(MongoDB)
问题背景: 我在Mongonabs(mLab-)中设置了一个数据库,并添加了一个非常简单的集合。我正在使用MongoDB驱动程序尝试通过C#3.2驱动程序连接并使用此集合 问题: 我无法通过C#驱动程序连接到我的数据库,需要持续的身份验证,如图所示:无法通过C#客户端连接到MongoDB(MongoDB),c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,问题背景: 我在Mongonabs(mLab-)中设置了一个数据库,并添加了一个非常简单的集合。我正在使用MongoDB驱动程序尝试通过C#3.2驱动程序连接并使用此集合 问题: 我无法通过C#驱动程序连接到我的数据库,需要持续的身份验证,如图所示: MongoClient client; var connectionString = "mongodb://userNameGoesHereRemovedForSO:passwordGoesHereRemovedForSO@ds048555.ml
MongoClient client;
var connectionString = "mongodb://userNameGoesHereRemovedForSO:passwordGoesHereRemovedForSO@ds048555.mlab.com:48719/db";
client = new MongoClient(connectionString);
var database = client.GetDatabase("testDB");
var collection = database.GetCollection<string>("test");
System.TimeoutException:使用CompositeServerSelector{Selectors=ReadPreferenceServerSelector{ReadPreference={Mode=Primary,TagSets=[]},LatencyMitingServerSelector{AllowedLatencyRange=00:00.0150000}选择服务器30000ms后发生超时。群集状态的客户端视图为{ClusterId:“1”,连接模式:“自动”,类型:“未知”,状态:“断开”,服务器:[{ServerId:{ClusterId:1,端点:“Unspecified/ds048719.mlab.com:48719”},端点:“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:passwordGoesHereRemovedForSO@ds048555.mlab.com:48719/db";
client = new MongoClient(connectionString);
var database = client.GetDatabase("testDB");
var collection = database.GetCollection<string>("test");
MongoClient客户端;
变量连接字符串=”mongodb://userNameGoesHereRemovedForSO:passwordGoesHereRemovedForSO@ds048555.mlab.com:48719/db”;
客户端=新的MongoClient(connectionString);
var database=client.GetDatabase(“testDB”);
var collection=database.GetCollection(“测试”);
非常感谢您提供帮助或示例,说明如何成功克服此身份验证问题。如果我不得不冒险猜测,此问题很可能是防火墙问题。您应该检查以下内容
- 来自C#应用程序主机的主机(ds048719.mlab.com)的
nslookup
- 从C#应用程序主机对主机(ds048719.mlab.com)执行ping操作(可能会失败,具体取决于mlab的设置)
- 你的IP地址是
- 使用运行C#应用程序的同一主机上的Mongo Shell测试连接。mLab有文档
- 使用原始的
测试连接,例如telnet
telnet ds048719.mlab.com 48719
- 确保您使用的是正确的
(在您的示例中,这是由authenticationDatabase
指定的),这通常是/db
,但如果您在共享实例上,则可能是您的数据库名称admin
mongodb://host:27017/mydb
上面,名为“mydb”的数据库是存储应用程序凭据的地方
注意:
某些驱动程序使用数据库组件来指示默认情况下使用哪个数据库。NET驱动程序在解析数据库组件时,除了身份验证之外,不会将数据库组件用于任何其他用途
最后,我建议在将来发布到SO时混淆主机名和端口。虽然仅通过模糊性进行安全保护是一项不好的策略,但它肯定会为MongoDB部署添加一层防御措施。您的连接字符串可能不正确。您的结尾是/db,“db”是身份验证数据库的名称吗
确保您的身份验证数据库正确无误。如果不正确,您可能希望将其全部删除,并让其返回给管理员我也有类似问题,在我的情况下,用户不是在数据库中创建的。您可以通过此方法创建用户
db.createUser({
user: "userNameGoesHereRemovedForSO",
pwd: "passwordGoesHereRemovedForSO",
roles: ["readWrite", "dbAdmin"]
});
快速解决方法:只需从
url
var client = new MongoClient("mongodb://root:example@localhost:27017");
var _db = client.GetDatabase("testDB");
C#driver通过
client.GetDatabase
方法获取数据库引用。连接字符串中指定的数据库是authenticationDatabase
谢谢@PeteGarafano。这一点信息让我无法验证您的问题导致我质疑哪个“db”我试图连接到。出于某种奇怪的原因,我似乎只能连接到admin,它让我可以处理我所有的数据库,我不确定这是我想要的,但它现在可以工作。谢谢@Piepuru!非常有用!我没有在最后添加用于身份验证的DB。因为我的身份验证失败了。