Тайм-аут произошел после 30000 мс при выборе сервера при доступе к MongoDB в Azure с использованием C # - PullRequest
2 голосов
/ 08 апреля 2019

Консольное приложение .Net находится в среде 4.6.1 с использованием MongoDB.Driver 2.8.0. Я сослал много сообщений в SO, но я все еще получаю ошибку тайм-аута. Ниже приведены некоторые из постов, на которые я ссылался

Тайм-аут произошел после 30000 мс при выборе сервера с помощью CompositeServerSelector System.TimeoutException: истекло время ожидания после 30000 мс при выборе сервера с помощью CompositeServerSelector MongoDB C # 2.0 TimeoutException

Ниже приведен код, который я использовал для доступа к документам из коллекции.

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;

class Program
{
    static void Main(string[] args)
    {
        string connectionString =
            @"mongodb://mongoaccnt:ADASDXZWADAS2VgsqTYcTS4gtADmB1zQ==@mongocnt.documents.azure.com:10255/?ssl=true&replicaSet=globaldb";

        MongoClientSettings settings = MongoClientSettings.FromUrl(
          new MongoUrl(connectionString)
        );

        settings.SslSettings = new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };

        var mongoClient = new MongoClient(settings);
        string dbName = "app-db";
        string collectionName = "test";
        var database = mongoClient.GetDatabase(dbName);


        var todoTaskCollection = database.GetCollection<test>(collectionName);

        var filter = Builders<test>.Filter.Eq("name", "second");

        var results = todoTaskCollection.Find(filter).ToList();

        Console.WriteLine(results);
        Console.ReadLine();
    }

}

public class test
{
    public string name { get; set; }        
}

Ниже приведены данные, отображаемые на облачном портале Azure

db.test.find()
Operation consumed 2.31 RUs
{ "_id" : ObjectId("5ca4949fd59b290e00e35eda"), "id" : 1, "name" : "first" }
{
    "_id" : ObjectId("5caafe968f678e0f504c6e64"),
    "id" : 2,
    "name" : "second"
}

Ниже приведена подробная ошибка

System.TimeoutException HResult = 0x80131505 Сообщение = Тайм-аут произошел после 30000 мс при выборе сервера с помощью CompositeServerSelector {Selectors = MongoDB.Driver.MongoClient + AreSessionsSupportedServerSelector, LatencyLimitingServerSelector {AllowedLatencyRange = 00: 00: 00.0150000}}. Клиентское представление состояния кластера: {ClusterId: "1", ConnectionMode: "ReplicaSet", тип: "ReplicaSet", состояние: "Disconnected", серверы: [{ServerId: "{ClusterId: 1,

1 Ответ

0 голосов
/ 29 апреля 2019

Вы пытались добавить "? Connect = replicaSet" после строки подключения:

Этот билет JIRA содержит подробную информацию: https://jira.mongodb.org/browse/CSHARP-1160

По сути, они сделали различие между подключением к автономному серверу и подключением напрямую к члену набора реплик, где последний является относительно редким. К сожалению, настройки MongoLab Single-Node на самом деле представляют собой набор реплик одного узла, и это заставляет нас не доверять ему. Вы можете исправить это, добавив? Connect = replicaSet в строку подключения. Это заставит драйвер перейти в режим установки реплик, и все будет работать.

Вы можете найти более подробную информацию о: https://groups.google.com/forum/#!topic/mongodb-csharp/O460OHiFjZs

Надеюсь, это поможет.

...