我已经设置了一个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();
我错过了什么?
答案 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