客户端如何查询db4o服务器?

时间:2011-11-22 00:07:56

标签: client db4o

我已经设置了一个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());

然后返回False,这很好。

但是当我尝试获取或保存数据时,它不起作用。保存数据时,它似乎可以工作,但我没有在数据库中看到数据。在尝试检索对象时,我收到此错误:

Db4objects.Db4o.Ext.Db4oException:抛出了类型'Db4objects.Db4o.Ext.Db4oException'的异常。 ---> System.ArgumentException:在类型'Db4objects.Db4o.Internal.Query.DelegateEnvelope'上定义的字段'_delegateType'不是目标对象上的字段,其类型为'Db4objects.Db4o.Reflect.Generic.GenericObject'。

以下是保存的客户端调用,然后获取:

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

这是GetDatabase()方法中唯一的一行:

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

以下是从DB获取的电话:

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

我错过了什么?

2 个答案:

答案 0 :(得分:2)

没有引用的服务器,持久化类是一个“冒险”的事情。很多功能上都不起作用,发生的错误很神秘。我强烈建议始终使用服务器上的持久类来引用程序集。

另一个提示:使用LINQ instead本机查询。它效果更好,问题更少。

答案 1 :(得分:0)

哈哈!我知道了。它需要一些谷歌搜索,但问题是服务器没有对实体的引用。一旦我的服务器项目引用了我的客户端项目,它就可以工作了。所以,看起来我只需要将我的实体移动到客户端和服务器都可以引用的公共项目中。

感谢此链接: 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