【问题标题】:A timeout occured after 30000ms selecting a server using CompositeServerSelector使用 CompositeServerSelector 选择服务器 30000 毫秒后发生超时
【发布时间】:2015-09-27 15:17:37
【问题描述】:

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

    }

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

【问题讨论】:

  • 是的,我在建立连接字符串时出错了,所以发生了超时错误。请看下面的答案。
  • 我遇到了这个错误,因为我的连接字符串中的端口与我的本地 mongo db 配置和设置中的端口不匹配。一旦它们匹配,这个错误就停止了。
  • @AussieJoe 很棒

标签: c# mongodb replication mlab nosql


【解决方案1】:

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

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

现在解决了。

请看 Paul Lemke 的回答。

【讨论】:

  • 是的,MongoLab 不喜欢新的MongoSettings(new MongoUri("..."))
  • 你为什么不把他的答案标记为解决方案?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果连接到 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.

    【讨论】:

      【解决方案4】:

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

      我刚刚在使用 Asp.Net Core 应用程序时遇到了标题中列出的相同错误。我的问题是由 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

      【讨论】:

        【解决方案5】:

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

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

        此行中的 db-name 被视为身份验证数据库。

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

        然后您可以稍后更改所选的 DB

        mDb = mClient.GetDatabase(mongoDBName);
        

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • @RamyDeeb 它不仅适用于发布它的用户,也适用于面临类似问题并查看相关答案的用户
          • @RamyDeeb 该答案也为其他有相同问题并可以寻找其他可能解决方案的人提供。拜托,如果您有其他“解决方案”,请添加它,这个平台就是为它而构建的!
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-02-22
                  • 2020-04-02
                  • 2019-08-29
                  • 1970-01-01
                  • 2020-05-05
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多