私はMongoDBの最新バージョン(Windows 64 Server上)とC#ドライバを使用しています。私は800をやっているWindowsサービスを読み込んで、毎分アップデートがあり、数分後に使用されている現在のスレッドが200以上になると、その後すべての単一のMongoDBの呼び出しは、このエラーを与える:MongoDB C#ドライバは接続を解除してからエラーを返しません
System.IO.IOException: Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
私は上のインデックスを持っていますそれが問題ではないので、読んでいるフィールド。ここでは、読み取りのためのコードは次のとおりです。
public static UserUpdateMongo Find(int userId, long deviceId)
{
return Collection().Find(
Query.And(
Query.EQ("UserId", userId),
Query.EQ("DeviceId", deviceId))).FirstOrDefault();
}
私はそうのような接続をインスタンス化します。
var settings = new MongoServerSettings
{
Server = new MongoServerAddress(segments[0], Convert.ToInt32(segments[1])),MaxConnectionPoolSize = 1000};
Server = MongoServer.Create(settings);
}
私が何か間違ったことやC#のドライバの問題がありますかな?助けて!!
私は接続が100に達するまで接続が増え続けるため、すべての要求が「転送接続からデータを読み取れません」というエラーが発生するため、接続プールのサイズが100であることがわかりました。私は200までの限界を増やそうとしましたが、同じことが起こりました。接続は200まで増え、再びエラーになります。しかし、エラーのために接続が増えていないため、C#ドライバが処理するにはあまりにも多く(一度設定された制限に達すると)なったら、ただちにビルドされ、解放されずにエラーになります。 – Justin
私はMongoサーバオブジェクトはスレッドセーフであり、同時リクエストのキューのように動作するはずですが、実際には重大な負荷を処理できません。ああ、あなたの応答のおかげで、私は1.2ドライバを試してみますが、一度接続が高いと上記のトランスポートエラー以外にエラーが発生していないので、何の効果もないように思えます。 – Justin
実際に私はちょうどチェックして、私はすでに1.2.0.4274を使用しています。 – Justin