无法通过C#客户端连接到MongoDB(MongoLabs)

use*_*057 8 c# mongodb mongodb-.net-driver

问题背景:

我在MongoLabs(mLab - https://mlab.com/)中设置了一个数据库并添加了一个非常简单的Collection.我正在使用MongoDB驱动程序尝试通过C#3.2驱动程序连接和使用此集合.

问题:

我无法通过C#驱动程序连接到我的数据库,并且持续进行身份验证,如下所示:

System.TimeoutException:使用CompositeServerSelector选择服务器30000ms后发生超时{Selectors = ReadPreferenceServerSelector {ReadPreference = {Mode = Primary,TagSets = []}},LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000}}.集群状态的客户端视图是{ClusterId:"1",ConnectionMode:"Automatic",类型:"Unknown",状态:"Disconnected",服务器:[{ServerId:"{ClusterId:1,EndPoint:"Unspecified/ds048719. mlab.com:48719"}",EndPoint:"未指定/ ds048719.mlab.com:48719",状态:"已断开",类型:"未知",HeartbeatException:"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");
Run Code Online (Sandbox Code Playgroud)

任何有关如何成功克服此身份验证问题的帮助或示例都将受到高度赞赏.

Pet*_*ano 15

如果我不得不冒险猜测,问题很可能是防火墙问题.你应该检查以下内容

  • nslookup 来自C#Application Host的主机(ds048719.mlab.com)
  • ping 来自C#Application Host的主机(ds048719.mlab.com)(可能会失败,具体取决于mLab的设置)
  • 您的IP地址已列入白名单
  • 使用运行C#应用程序的同一主机上的Mongo Shell测试连接.mLab有这里的文档.
  • 用原始测试连接telnet,例如telnet ds048719.mlab.com 48719
  • 确保您使用的是正确的authenticationDatabase(在您的示例中,由此指定/db),admin如果您位于共享实例上,这通常可以是您的数据库名称.

您可以在MongoDB C#驱动程序文档中找到有关与C#驱动程序连接的文档.请务必注意以下事项:

数据库组件

数据库组件是可选的,用于指示要进行身份验证的数据库.如果未提供数据库组件,则使用"admin"数据库.

mongodb://host:27017/mydb

上面,名为"mydb"的数据库是为应用程序存储凭据的位置.

注意:

某些驱动程序利用数据库组件来指示默认使用哪个数据库..NET驱动程序在解析数据库组件时,不会将数据库组件用于除身份验证之外的任何其他操作.

最后,我建议将来在发布到SO时模糊主机名和端口.虽然通过默默无闻的安全性是一个糟糕的政策,但它确实为您的MongoDB部署增加了一层防御.

  • 很有用!我最后没有添加用于身份验证的数据库.因为我的身份验证失败了. (2认同)