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

A timeout occured after 30000ms selecting a server using CompositeServerSelector

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

    }

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

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

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

现在解决了

请参阅 Paul Lemke 的回答。

确保数据库用户名也区分大小写。由于用户名区分大小写,我 运行 进入这个问题。

如果连接到 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 的 Single-Node 设置实际上是一个单节点副本集,这导致我们不信任它。将 ?connect=replicaSet 附加到您的连接字符串将强制驱动程序进入副本集模式,并且一切正常。

Found that info here.

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

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

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

根据 MongoDb C# Driver:

It is recommended to store a MongoClient instance in a global place, either as a static variable or in an IoC container with a singleton lifetime.

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

我正在使用:

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

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

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

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

这一行的db-name被认为是auth DB。

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

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

mDb = mClient.GetDatabase(mongoDBName);

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

我遇到了这个问题,结果是数据库服务器延迟了 2 小时。一旦我确定了它的时间,超时问题就解决了。

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

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

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

我的 Internet provider/firewall 规则阻止了端口 10255。 在客户端打开这个端口解决了这个问题。

就我而言,在尝试使用 docker compose 执行应用程序时,我忘记了环境变量。通过添加正确的环境变量解决了该问题。