使用CompositeServerSelector选择服务器30000ms后发生超时

时间:2015-07-09 10:01:33

标签: c# mongodb replication mlab nosql

我尝试在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);

    }

但是当我尝试连接数据库时,它显示的错误如下:

enter image description here

10 个答案:

答案 0 :(得分:14)

我正在替换下面的连接字符串方法。

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

现在它已经解决了。

请参阅Paul Lemke的答案。

答案 1 :(得分:12)

如果连接到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附加到您的连接字符串将强制驱动程序进入副本集模式,所有这些都可以正常工作。

Found that info here.

答案 2 :(得分:2)

Make Sure your auth db is set correctly.

I ran into this issue when I mentioned only the DB i wanted to connect to , and my auth db was different (other than admin db ).

The db-name in this line is considered as the auth DB .

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

Then you can change the selected DB Later

mDb = mClient.GetDatabase(mongoDBName);

答案 3 :(得分:2)

它与MongoDB连接错误有关。可能您没有权限,或者未在MongoDB中指定允许的IP。请检查MongoDB Compose中的示例,是否可以连接MongoDB Atlas。如果无法连接,则意味着您使用了错误的MongoDB连接字符串。

答案 4 :(得分:1)

确保数据库用户名也区分大小写。由于用户名的区分大小写,我遇到了这个问题。

答案 5 :(得分:1)

确保当前的IP地址在mongo数据库服务器中列入白名单。 如果您更改互联网提供商,则需要将新IP列入白名单。

答案 6 :(得分:1)

端口 10255 被我的 Internet 提供商/防火墙规则阻止。 在客户端打开这个端口解决了这个问题。

答案 7 :(得分:0)

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

我刚刚遇到与Asp.Net核心应用程序标题中列出的相同错误。我的问题是由于IOC配置问题。

在我的IOC容器中,我的包装MongoClient实例配置了依赖性瞬态生活方式。

每个MongoDb C#驱动程序:

  

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

我将对象的生活方式提升为单身人士,并解决了这个问题。

我正在使用:

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

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

答案 8 :(得分:0)

我遇到了这个问题,结果数据库服务器落后2小时。确定时间后,超时问题就解决了。

答案 9 :(得分:0)

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

就我而言,问题是由我的Internet提供商路由器引起的。将连接切换到iPhone的4G热点可以解决连接问题。