Как клиент может запросить сервер db4o? - PullRequest
0 голосов
/ 22 ноября 2011

Я настроил сервер и клиент db4o. Мои клиентские звонки не работают.

Что меня озадачивает, так это то, что примеры db4o показывают, как клиент может закрыть сервер, а не то, как получить и сохранить данные. Смотри: http://community.versant.com/Documentation/Reference/db4o-7.12/java/reference/Content/client-server/networked/simple_db4o_server.htm

Если я запускаю сервер db4o и запускаю netstat, я вижу, что порт открыт. А на клиенте я могу делать такие вещи:

Debug.WriteLine (.. Db.Ext () IsClosed () ToString ());

И это возвращает Ложь, что хорошо.

Но когда я пытаюсь получить или сохранить данные, это не работает. При сохранении данных, похоже, работает, но я не вижу данных в БД. При попытке получить объект, я получаю эту ошибку:

Db4objects.Db4o.Ext.Db4oException: исключение типа 'Db4objects.Db4o.Ext.Db4oException' было сгенерировано. ---> System.

Вот клиентские вызовы для сохранения, затем получить:

Server server = new Server() { Name = "AppServerFoo" };
IObjectContainer db = GetDatabase();
db.Store(server);
db.Close();

Вот единственная строка в методе GetDatabase ():

return Db4oClientServer.OpenClient(Db4oClientServer.NewClientConfiguration(), "DellXps", 8484, "user", "password");

А вот звонок из БД:

IObjectContainer db = GetDatabase();
Server testServer = db.Query<Server>(server => server.Name == "AppServerFoo").FirstOrDefault();
db.Close();

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Ну, сервер без ссылки на сохраняемые классы - «рискованная» вещь. Многое функционально не работает, а возникающие ошибки загадочны. Я настоятельно рекомендую всегда ссылаться на сборку с сохраненными классами на сервере.

Другой совет: используйте LINQ вместо собственных запросов. Работает лучше и имеет меньше проблем.

0 голосов
/ 22 ноября 2011

А га! Я понял. Это заняло некоторое гугление, но проблема заключалась в том, что на сервере не было ссылки на сущности. Как только мой серверный проект ссылался на мой клиентский проект, он работал. Похоже, мне просто нужно переместить мои объекты в общий проект, на который могут ссылаться и клиент, и сервер.

Благодаря этой ссылке: http://www.gamlor.info/wordpress/2009/11/db4o-client-server-and-concurrency/

Эта ссылка выглядит как шлюз для работы сервера без ссылки на сущности: http://community.versant.com/Documentation/Reference/db4o-7.12/net2/reference/html/reference/client-server/server_without_persistent_classes_deployed.html

...