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가 반환됩니다.
하지만 데이터를 가져 오거나 저장하려고하면 작동하지 않습니다. 데이터를 저장하면 작동하는 것처럼 보이지만 DB에 데이터가 표시되지 않습니다. 개체를 검색 할 때이 오류가 발생합니다.
Db4objects.Db4o.Ext.Db4oException : 'Db4objects.Db4o.Ext.Db4oException'형식의 예외가 throw되었습니다. ---> 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();
무엇이 누락 되었습니까?
나를 위해이 접근법에 두 가지 사소한 문제가 있습니다. 나는 다소 순수 주의자이며 DB 서버로 내 어셈블리를 배포해야한다는 것은 불행하다고 생각합니다. 아마도 MS SQL Server에 익숙하지 않기 때문일 수 있습니다. 아니면 배포를 미리 생각하고 있기 때문일 수도 있습니다. 또한, 나는 (Lambda preference over linq) 내 저장 스타일을 선택하기 때문에 코딩 스타일을 바꾸고 싶지 않습니다. 모든 것을 말하면 OODB는 새로운 것이므로 지금은 DB를 사용하여 엔티티를 배포하고 시간이 지남에 따라 내 방식을 찾으십시오. 감사! –