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

Rag*_*h S 19 c# replication mongodb nosql mlab

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

    }
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

Rag*_*h S 14

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

new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name")
Run Code Online (Sandbox Code Playgroud)

现在它已经解决了.

请参阅Paul Lemke的答案.

  • 是的,MongoLab 不喜欢 new `MongoSettings(new MongoUri("..."))` (2认同)

小智 13

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

  • @RamyDeeb 它不仅适用于发布它的用户,也适用于那些面临类似问题并查看相关答案的人 (3认同)

Pau*_*mke 12

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

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

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

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

在这里找到了这些信息


Bre*_*ann 5

相同的错误消息,但在 MongoLabs 部署中未遇到。

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

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

根据 MongoDb C# 驱动程序:

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

我将对象的生活方式提升为单例,它解决了问题。

我在用:

  • .Net核心2.0
  • Mongo C# 驱动程序版本 2.5
  • 我的 IOC 版本 3.3.0 的温莎城堡

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


小智 5

确保您的身份验证数据库设置正确。

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

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

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

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

mDb = mClient.GetDatabase(mongoDBName);
Run Code Online (Sandbox Code Playgroud)