我已經建立了一個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();
我錯過了什麼?
這個方法對我來說有兩個小問題。我是一個純粹主義者,我認爲不得不在數據庫服務器上部署我的程序集。也許這是因爲我不習慣於MS SQL Server。或者,也許是因爲我正在考慮進行部署。另外,我不想改變我的編碼風格(lambda優先於linq),因爲選擇了持久性存儲。說了這麼多,OODB對我來說是新的,所以我現在只需用DB部署這些實體,並隨着時間的推移找到我自己的方式。謝謝! –