0
[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);
    }
}

元のコードの何が問題なのか知りたいです。唯一の違いは、mongolab をホストしている私の mongodb がそのバージョンを 2.0.2 に昇格させたことです。ヒントをいただければ幸いです。

4

1 に答える 1

0

解決しました。コードやデータベースのバージョンの問題ではありません。バックグラウンドで実行されているアプリケーションがあり、ネットワーク リソースを消費しています。

そのアプリケーションを閉じた後、テストを再実行します。テストはうまくいきます。

于 2012-02-04T20:59:45.447 に答える