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

问题描述 投票:12回答:6

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

    }

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

c# mongodb replication mlab nosql
6个回答
14
投票

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

new MongoClient("mongodb://username:[email protected]:11111/db-name")

现在它已经解决了。

请参阅Paul Lemke的答案。


12
投票

如果连接到MongoLab,请将“?connect = replicaSet”添加到连接字符串的末尾。

new MongoClient("mongodb://username:[email protected]:11111/db-name?connect=replicaSet")

这张JIRA票有一些细节:https://jira.mongodb.org/browse/CSHARP-1160

基本上默认是连接到副本集成员。但MongoLab的单节点设置实际上是单节点副本集,这使我们不相信它。将?connect = replicaSet附加到您的连接字符串将强制驱动程序进入副本集模式,所有这些都将起作用。

Found that info here.


2
投票

确保你的auth db设置正确。

当我只提到我想要连接的数据库时,我遇到了这个问题,而我的auth db是不同的(除了admin db)。

此行中的db-name被视为auth DB。

new MongoClient("mongodb://username:[email protected]:11111/db-name?connect=replicaSet")

然后,您可以稍后更改所选的数据库

mDb = mClient.GetDatabase(mongoDBName);

1
投票

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


1
投票

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


0
投票

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

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

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

每个MongoDb C#驱动程序:

建议将MongoClient实例存储在全局位置,可以是静态变量,也可以是具有单例生存期的IoC容器。

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

我在用:

  • .Net Core 2.0
  • Mongo C#驱动版2.5
  • 温莎城堡为我的IOC版本3.3.0

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

© www.soinside.com 2019 - 2024. All rights reserved.