0

私はmongodbサーバーからアイテムを取得しようとしていますが、時々その作業があり、4〜5回試みた後、最後の行で反応が停止します(クエリの外にオブジェクトを取り出すことはできません)。オブジェクトを取り出す正しい方法は何ですか?

            var client = new MongoClient(connectionString);
            var server = client.GetServer();
            var database = server.GetDatabase("myPlaces");
            var collection = database.GetCollection<MongoPlace>("Places");  
            int startDay =  int.Parse(Request.QueryString["day"]);
            MongoPlace mp = collection.AsQueryable<MongoPlace>().Where(x => x.guid == 
                            Request.QueryString["id"]).FirstOrDefault();
4

1 に答える 1

0

デフォルトの接続プール制限に達している可能性があります。

これは Web アプリケーションのように見えるため、Web アプリケーションのインスタンスごとに複数回クライアントを開くべきではありません。

MongoClient、およびはすべてスレッドセーフであり、通常、それぞれのインスタンスは 1 つだけ存在する必要がありますMongoServer。 (詳細については、こちらを参照してください)。MongoDatabaseMongoCollection

アプリケーションの開始時にこれを実行し、アプリケーションが終了するまで接続を静的に維持することをお勧めします。

私の ASP.NET MVC アプリケーションでは、通常、他のアプリ構成と同じ方法で呼び出される "DatabaseConfig" クラスを追加します。例として、現在MongoDBを使用して構築しているプロジェクトで取得したコードを次に示します(まだエラー処理はありません):

var client = new MongoClient(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
var server = client.GetServer();

DataLayer.Client = client;
DataLayer.Server = server;

var settings = new MongoDatabaseSettings(server, "default");            
settings.WriteConcern = WriteConcern.Acknowledged;
DataLayer.Database = DataLayer.GetDatabase(settings);

次に、Application_Start で、Initialize上記のコードを含むメソッドを呼び出します。

DatabaseConfig.Initialize();
于 2013-02-03T17:01:58.607 に答える