使用CompositeServerSelector选择服务器时,发生了30000ms超时。

32

我尝试在Mongolabs上部署我的Mongo数据库,一切都很顺利,我创建了一个新的数据库。请查看我的连接字符串。

    public DbHelper()
    {

        MongoClientSettings settings = new MongoClientSettings()
        {
            Credentials = new MongoCredential[] { MongoCredential.CreateCredential("dbname", "username", "password") },
            Server = new MongoServerAddress("ds011111.mongolab.com", 11111),
            //ConnectTimeout = new TimeSpan(30000)
        };

        Server = new MongoClient(settings).GetServer();

        DataBase = Server.GetDatabase(DatabaseName);

    }

但是当我尝试连接数据库时,会显示以下错误:

在此输入图片描述


2
是的,我在连接字符串构建方面犯了错误,所以出现了超时错误。请参见下面的答案。 - Ragesh S
1
可能是MongoDB C# 2.0 TimeoutException的重复问题。 - kenorb
2
我遇到了这个错误,因为我的连接字符串中的端口与本地MongoDB配置和设置中的端口不匹配。一旦它们匹配,这个错误就消失了。 - AussieJoe
1
@AussieJoe 很棒 - Ragesh S
13个回答

33

如果连接到MongoLab,请在连接字符串结尾处添加"?connect=replicaSet"。

new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")

这个JIRA工单有一些详情:https://jira.mongodb.org/browse/CSHARP-1160

基本上默认情况下会连接到一个副本集成员。但MongoLab的单节点设置实际上是单节点副本集,这让我们不能信任它。在连接字符串中追加 ?connect=replicaSet 将强制驱动程序进入副本集模式,这样就可以正常工作了。

在这里找到了相关信息。


23

我正在像下面这样替换连接字符串方法。

new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name")

现在问题已解决。

请查看Paul Lemke的答案。


2
是的,MongoLab 不喜欢新的 MongoSettings(new MongoUri("...")) - Chris S
1
你为什么没有将他的回答标记为解决方案? - Rodrigo Reis

19

确保您当前的IP地址已被添加到MongoDB服务器的白名单中。如果更换互联网服务提供商,则需要将新的IP地址添加到白名单中。


3
@RamyDeeb 这不仅仅是为了发布它的用户,还为那些遇到类似问题并查看相关答案的人提供帮助。 - Komal Bansal
@RamyDeeb 提供的答案也适用于其他遇到相同问题并寻找其他可能解决方案的人。如果您有另一个“解决方案”,请添加它,这个平台就是为此而建立的! - Gabriel Andrés Brancolini
我的Azure服务到底发生了什么事... - Vitaliy Markitanov

7

确保您的认证数据库设置正确。

当我仅提到了我要连接的数据库而我的认证数据库与管理数据库不同时,我遇到了这个问题。

在这行代码中,db-name是被视为认证数据库。

new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")

然后你可以稍后更改所选的数据库。
mDb = mClient.GetDatabase(mongoDBName);

你的连接字符串中的 connect 参数是什么?我在Mongo文档中找不到相关信息。 - mnj

5

相同的错误信息,但在MongoLabs部署中没有遇到。

我刚刚在Asp.Net Core App中遇到了与标题中列出的相同错误。我的问题是由于IOC配置问题引起的。

在我的IOC容器中,我的包装MongoClient实例被配置为依赖短暂的生命周期。

根据MongoDb C# Driver:

建议将MongoClient实例存储在全局位置, 要么作为静态变量,要么在具有单例生命周期的IoC容器中。

我将对象的生命周期提升为单例,并解决了该问题。

我使用的是:

  • .Net Core 2.0
  • Mongo C# Driver版本2.5
  • Castle Windsor用于我的IOC版本3.3.0

请参考C# Driver客户端部分: http://mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/#re-use


3

请确保数据库用户名也区分大小写。我遇到了这个问题,是因为用户名的大小写不一致。


3

这与MongoDB连接错误有关。可能是您没有权限或者在MongoDB中没有指定允许的IP地址。例如,请检查MongoDB Compose是否能够连接到您的MongoDB Atlas。如果无法连接,则表示您的MongoDB连接字符串有误。


2

在我的情况下,当尝试使用docker compose执行应用程序时,我忘记了环境变量。通过添加正确的环境变量,问题得到了解决。


你添加了哪些环境变量? - tometchy
我现在记得的是与数据库连接和ASP .NET环境有关的内容。现在看项目,我可以看到两个:一个是来自MongoDb数据库连接;另一个存在于主Docketfile中,在API层中:ENV ASPNETCORE_URLS=http://+:5223 - arakakivl

1
我的互联网服务提供商/防火墙规则屏蔽了10255端口。 在客户端打开此端口可以解决问题。

1

我也遇到了同样的问题。我能够使用MongoDb Compass连接到MongoDB Atlas,但是在C#项目中使用相同的连接字符串时,我收到了错误消息:“在使用CompositeServerSelector选择服务器后,发生了30000ms超时……---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (61): Connection refused 192.168.1.254:53"。

在我的情况下,这个问题是由我的互联网服务提供商路由器引起的。将连接切换到我的iPhone的4G热点解决了连接问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接