2012-02-04 5 views
0
[TestMethod] 
public void TestLoop() 
{ 
    var server = MongoServer.Create(
     @"mongodb://user:[email protected]: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); 
    } 
} 

これはテスト目的でコレクションを取得する簡単なテスト機能です。以前は正常に動作しましたが、壊れて次のエラーがスローされます。Mongodb FindAllがExptectedとして機能しない

トランスポート接続からデータを読み取ることができません:接続されたホストが応答しなかったため、接続が失敗しました。

このエラーは、カーソルがデータの次のバッチを取得したいときにスローされます。接続が切断されているので、コードを修正して強制的に再接続するようにしました。

[TestMethod] 
public void TestLoop() 
{ 
    var server = MongoServer.Create(
     @"mongodb://user:[email protected]: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にプロモートしたことだけです。どんなヒントもありがたいです。

答えて

0

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

このアプリケーションを閉じてから、テストを再実行してください。テストはうまくいく。

+1

ありがとうございました! –

関連する問題