C#のドライバでつないでたMongoDBサーバを変更したらよくつながらなくなったのとその対処

 このブログのデータベースはMongoDBのホスティングサービスmlabを使っていたのだが、スペックとコストなどの問題から、VPSに入れたものへ切り替えた。そうしたらデータが取ってこれなくなることが頻発した。

 このブログはASP.NET Core MVCで作ってある。アプリのプロセス立ち上がり時にデータベース接続を行い、以降はその接続を使いまわしてリクエストをさばいていた。
client = new MongoClient(clientSettings);

db = client.GetDatabase(dbName);


 調べてみたところ、接続時のオプションにkeepAliveなるものがあるようなので、それを使ってみた。問題は起きなくなった。
https://jira.mongodb.org/browse/CSHARP-1151
var url = new MongoUrl(connectionString);

var clientSettings = MongoClientSettings.FromUrl(url);
Action<Socket> socketConfigurator = s => s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
clientSettings.ClusterConfigurator = cb => cb.ConfigureTcp(tcp => tcp.With(socketConfigurator: socketConfigurator));
client = new MongoClient(clientSettings);
db = client.GetDatabase(dbName);


 アプリ観察によると問題はとりあえず解決したようなんだけどちょっともやもや。MongoDBサーバをホスティングサービスのものから自分のVPS運用のものに変えてから問題は出始めた。なのにクライアントサイドの接続コードを変えることで問題は解決した。ちょっと謎。
comment: 0