从C#2.1驱动正确关闭MongoDB数据库连接?我刚刚开始将MongoDB集成到我的应用程序中,但遇到了一些问题。在我的应用程序中,我使用最新的MongoDBC#驱动程序版本2.1,并且仅将MongoDB用于应用程序日志记录。当前,在显示我的主应用程序表单时,我首先检查mongod.exe是否正在运行,如果没有,我将启动它。然后,当我的主窗体显示时,它会打开一个到数据库的连接以供下面使用。publicvoidOpen(){Client=newMongoClient("mongodb://localhost:27017");数据库=Client.GetDatabase(DBName);集合=Database.GetCollection(ColName);我的问题是当我的应用程序关闭时如何正确关闭此连接?还有一些注意事项我应该考虑在每次应用程序关闭而不是退出时运行mongod.exe吗?我在谷歌上搜索了几次,试图找出是否有关闭连接的正确方法,但一直没能找到任何非常具体的东西。有一篇旧的SO帖子(我现在似乎找不到)提到了.Dispose方法,尽管我似乎无法在最新的驱动程序中找到它,也无法从我的IDE的自动完成中找到它。从今天的MongoDB版本(MongoDB.Driverv2.0.1.27)开始,不需要关闭或处理连接。客户端自动处理。来自文档:MongoClient对象将是根对象。它是线程安全的,只处理连接到服务器、监视服务器以及在这些服务器上执行操作。[…]建议将MongoClient实例存储在全局位置,静态变量或具有单例生命周期的IoC容器。但是,使用相同设置创建的多个MongoClient实例将在下面使用相同的连接池。此SO答案中有部分/旧的线程安全MongoDB类列表。这个问题似乎已经在这里问过了,我应该什么时候打开和关闭MongoDB连接?如果这是公认的答案,我会保持连接打开,因为重新创建连接的成本很高。Mongo很好,有很多连接,打开很长时间。理想情况下,您应该将连接作为持久连接与应用程序的所有部分共享。C#驱动程序应该足够聪明,可以自己完成它,因此它不会创建太多连接,因为它在内部使用“连接池”,甚至可以重用连接。文档说:“与服务器的连接在幕后自动处理(连接池用于提高效率)。”对你很好,那么一切都很好。即使是MongoDBC#驱动程序的快速浏览页面也给出了相同的建议——通常,您只需为给定的集群创建一个MongoClient实例,并在整个应用程序中使用它。但是,当且仅当连接字符串相同时,创建多个MongoClients仍将共享相同的连接池。否则,我认为您可以简单地调用以在using(){}代码块内创建连接。它会自动为您调用dispose方法(因为它实现了IDisposable模式)。您应该将此块用于您想要处理的任何资源。根据我的经验,正确的方法是回答,但即使遵循了这些建议,我仍然有随机的EndOfStreamException。似乎有些问题是由互联网提供商在一段时间后关闭连接引起的。我通过添加以下内容解决了它:以上是C#学习教程:从C#2.1驱动程序正确关闭MongoDB数据库连接?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——MongoClientSettingssettings=MongoClientSettings.FromUrl(newMongoUrl(connectionString));settings.SslSettings=newSslSettings(){EnabledSslProtocols=SslProtocols.Tls12};settings.MaxConnectionIdleTime=TimeSpan.FromSeconds(30);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
