Mongodb FindAll не работает, как обнаружено - PullRequest
0 голосов
/ 04 февраля 2012
[TestMethod]
public void TestLoop()
{
    var server = MongoServer.Create(
        @"mongodb://user:password@dbh74.mongolab.com:2700/XXX");

    var database = server["XXX"];

    MongoCollection<Item> sourceCollection =database.GetCollection<Item>("Item");
    var counter = 0;
    int batchSize = 200;

    List<item> batch = new List<item>();
    foreach (var item in sourceCollection.FindAll().SetBatchSize(batchSize))
    {
        counter++;
        batch.Add(item);
    }
}

Это простая тестовая функция для извлечения коллекции для тестирования. Раньше он работал нормально, но он сломался и выдает следующую ошибку.

Невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, поскольку подключенный хост не смог ответить.

Эта ошибка выдается, когда курсор хочет получить следующую порцию данных. Кажется, соединение разорвано, поэтому я изменил свой код, чтобы обойти принудительное переподключение.

[TestMethod]
public void TestLoop()
{
    var server = MongoServer.Create(
        @"mongodb://user:password@dbh74.mongolab.com:2700/XXX");

    var database = server["XXX"];

    MongoCollection<Item> sourceCollection =database.GetCollection<Item>("Item");
    var counter = 0;
    int batchSize = 200;

    List<item> batch = new List<item>();
    foreach (var item in sourceCollection.FindAll().SetBatchSize(batchSize))
    {
        //serverX.Reconnect();
        counter++;
        if (counter% batchSize == 0)
        {
           server.Reconnect();
        }

        batch.Add(item);
    }
}

Я хочу знать, что не так с моим оригинальным кодом. Единственное отличие состоит в том, что мой хостинг mongodb mongolab только что продвинул свою версию до 2.0.2. Любые намеки приветствуются.

1 Ответ

0 голосов
/ 05 февраля 2012

Решено. Это не вопрос кода или версии БД. Приложение работает в фоновом режиме и использует сетевой ресурс.

После закрытия этого приложения и повторного запуска теста. Тест прошел нормально.

...