2016-12-01 57 views
1

我完全難住了。我正在使用最新的C#驅動程序(2.3.0.157)和最新的MongoDB(3.2)。數據庫作爲獨立設置運行,沒有複製或分片。我試過在Windows上本地運行以及在Amazon LINUX上遠程運行。MongoDB:在使用CompositeServerSelector選擇服務器30000ms後發生超時

我繼續得到一個超時錯誤,但神祕有時它只是工作(也許每20-30次嘗試一次)。

我創建的連接這樣:

private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["MongoDB"].ToString(); 
private static readonly string DataBase = ConfigurationManager.ConnectionStrings["MongoDBDatabase"].ToString(); 

private static IMongoDatabase _database; 


public static IMongoDatabase GetDatabase(string database) 
{ 
    if (_database == null) 
    { 
     var client = new MongoClient(ConnectionString); 
     _database = client.GetDatabase(database); 

    } 

    return _database; 
} 

並調用它像這樣:

public static List<Earnings> GetEarnings() 
{ 
    var db = GetDatabase(DataBase); 
    if (db == null) return new List<Earnings>(); 
    var logs = db.GetCollection<Earnings>("EarningsData"); 
    var all = logs.Find(new BsonDocument()).ToEnumerable().OrderBy(x => x.Symbol).ToList(); 
    return all; 
} 

,它會在方法的logs.Find兼職了。下面是完整的消息:

其他信息:30000ms選擇使用CompositeServerSelector {選擇器= ReadPreferenceServerSelector {ReadPreference = {模式=主,標籤集= []}},LatencyLimitingServerSelector {AllowedLatencyRange服務器後

發生超時= 00:00:00.0150000}}。集羣狀態的客戶端視圖是{ClusterId:「1」,ConnectionMode:「Direct」,Type:「Unknown」,State:「Disconnected」,Servers:[{ServerId:「{ClusterId:1,EndPoint:」XX.XX. XX.XX:27017「}」,EndPoint:「XX.XX.XX.XX:27017」,狀態:「斷開」,類型:「未知」}]}。

我使用完全合格的主機名嘗試,將連接=直接和連接= replicaSet到連接字符串,使用MongoClientSettings而不是連接字符串和一切我可以在論壇和StackOverflow上可能找到的。我不知所措,甚至不知道下一步該往哪裏看。有什麼建議?

我還要補充,我可以在命令行和RoboMongo正常連接...

+1

and the ipadress在「Servers:[{ServerId:」{ClusterId:1,EndPoint:「XX.XX.XX.XX:27017」}「,EndPoint:」XX.XX.XX.XX:27017「 「是正確的嗎? – HoefMeistert

+0

是的,這是正確的IP地址。我出於顯而易見的原因被混淆了。 – user1464246

+0

日誌集合中有多少個文檔? – HoefMeistert

回答

1

我們終於想通了如何解決這個問題,但我還是不明白髮生了什麼。在我們的例子中,我們有一個服務器產生〜10個信號中心,從MongoDB獲取他們的數據。看起來,當應用程序啓動時,它正在對MongoDB進行幾次快速調用以獲取最初的一組數據,雖然它偶爾會起作用,但大部分時間沒有。我們最終通過在加載每個SignalR集線器之間添加一秒的延遲來解決這個問題,所以最初的查詢被延遲了一段時間,我們沒有爭用。

關於這一點的奇怪之處在於,這些收藏都沒有大量的數據,並且初始加載通常是每集合100個文檔(最大)的<。一旦事情初始化,我們打MongoDB的頻率似乎並不重要。它似乎是在最初的負載。