在没有实时端口的情况下使用mongodb(嵌入式)

时间:2013-12-01 06:22:27

标签: c# mongodb

我从C#代码开始使用mongodb 我连接到它而没有提到任何端口:

ProcessStartInfo start = new ProcessStartInfo();     
start.FileName = dir + @"\mongod.exe";
start.WindowStyle = ProcessWindowStyle.Hidden;
start.UseShellExecute = false;

start.Arguments = "--dbpath d:\test\mongodb\data";

Process mongod = Process.Start(start);


MongoClient client = new MongoClient();
MongoServer server = client.GetServer();
MongoDatabase database = server.GetDatabase("db_name");

在mongodb控制台(输出窗口)我看到mongodb正在侦听一个端口 是否可以在没有端口的情况下启动mongo?

2 个答案:

答案 0 :(得分:2)

你做不到。 MongoDB是一个独立的服务器。与MongoDB通信的唯一方法是使用TCP or unix sockets,因此它永远不是真正的嵌入式数据库。自动部署数据库不会使其成为嵌入式数据库,它将拥有自己的进程,并且可供其他应用程序使用。

当您不配置端口时,MongoDB(及其驱动程序)将使用端口27017。

如果您需要嵌入式数据库,请使用一个。 Candidates for C#包括SQLite,db4o,perst和它的BSD许可分叉volante,以及大量较小的项目,如siaqodb(其中一些不是免费的)。

MongoDB会遇到麻烦,因为它对内存分配非常积极,并且在出现问题时可能需要修复。

答案 1 :(得分:0)

如果没有listening to a port,您就无法启动mongod,但要限制访问权限,您可以:

  • 使用bind_ip配置选项限制仅与localhost的连接(127.0.0.1)

  • 使用port配置选项更改为特定于您的应用程序的非标准端口

  • configure authentication以及相应的用户角色

鉴于您计划在用户的计算机上生成mongod进程,遗憾的是无法阻止具有管理员访问权限的已确定用户绕过上述任何限制。

正如@mnemosyn的回答所指出的那样,SQLite当然有designed to be embeddable之类的数据库,并且会编译到您的应用程序代码中而不会产生外部进程。