繁体   English   中英

使用 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);

    }

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

在此处输入图像描述

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

在这里找到了那个信息。

我正在替换如下所示的连接字符串方法。

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

现在已经解决了。

请参阅 Paul Lemke 的回答。

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

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

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

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

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

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

mDb = mClient.GetDatabase(mongoDBName);

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

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

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

根据 MongoDb C# 驱动程序:

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

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

我在用:

  • .Net 核心 2.0
  • Mongo C# 驱动程序 2.5 版
  • 我的国际奥委会版本 3.3.0 的温莎城堡

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

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

它与 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 热点解决了连接问题。

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

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

我遇到了这个问题,结果数据库服务器落后了 2 小时。 一旦我修复了它的时间,超时问题就解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM