2013-12-01 3 views
1

Я запускаю 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 без порта?

+1

http://fir3pho3nixx.blogspot.com/2011/08/using-mongodb-as-embedded-application.html –

+2

Какая польза от MongoDB без порта? Ничто не могло с ним общаться. Он имеет порт по умолчанию. – WiredPrairie

+0

@ShahroozJefri ㇱ - Не знаете, почему вы связались с этим? MongoDB по-прежнему нужен порт. – WiredPrairie

ответ

2

Вы не можете. MongoDB - автономный сервер. Единственный способ общения с MongoDB - использовать TCP or unix sockets, поэтому он никогда не является действительно встроенной базой данных. Автоматическое развертывание базы данных не делает ее встроенной базой данных, она будет иметь свой собственный процесс и будет доступна для других приложений.

Если не задан порт, MongoDB (и это драйвер) будет использовать порт 27017.

Если вам нужна встроенная база данных, использовать один. Candidates for C# включают SQLite, db4o, perst и это лицензионный вид на BSD volante и тонну небольших проектов, таких как siaqodb (некоторые из них не являются бесплатными).

MongoDB будет проблемой, потому что он довольно агрессивен относительно распределения памяти и может потребоваться ремонт, когда все пойдет не так.

+1

Кроме того, в зависимости от характера вашего приложения, даже если это было бы технически возможно, лицензия может вызвать у вас проблемы, так как это AGPL. – WiredPrairie

+0

@WiredPrairie - спасибо, поэтому работа с портом (!) Позволяет мне использовать его в коммерческом и свободном от ограничений? спасибо – Shazam

+1

@Shazam - Я не адвокат и не хочу давать юридические консультации. Объединение MongoDB может вызвать GPL, требуя от вас также освободить ваш источник. Проконсультируйтесь с адвокатом или используйте вложенную БД, как это предлагается в этом ответе. – WiredPrairie

0

Вы не можете начинать mongod без него listening to a port, однако, чтобы ограничить доступ, вы можете:

  • использовать опцию bind_ip конфигурации, чтобы ограничить соединения на локальный только (127.0.0.1)

  • использования параметр конфигурации port для изменения нестандартного порта, специфичного для вашего приложения

  • configure authentication a й соответствующие роли пользователя

Учитывая вы планируете икру mongod процесс на компьютере пользователя, вы, к сожалению, не может предотвратить определенные пользователи с правами администратора в обход любого из указанных выше ограничений.

Как отмечалось в ответе @mnemosyn, существуют базы данных, такие как SQLite, которые являются designed to be embeddable и скомпилированы в код приложения без возникновения внешних процессов.

Смежные вопросы