2011-11-22 3 views
0

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(); 

무엇이 누락 되었습니까?

답변

2

는 '위험하다 '것. 기능적으로 많은 기능이 작동하지 않으며 발생하는 오류가 이상합니다. 서버의 지속 된 클래스를 사용하여 어셈블리를 항상 참조하는 것이 좋습니다.

또 다른 팁 : LINQ instead 네이티브 쿼리를 사용하십시오. 그것은 더 잘 작동하고 덜 문제가 있습니다.

+0

나를 위해이 접근법에 두 가지 사소한 문제가 있습니다. 나는 다소 순수 주의자이며 DB 서버로 내 어셈블리를 배포해야한다는 것은 불행하다고 생각합니다. 아마도 MS SQL Server에 익숙하지 않기 때문일 수 있습니다. 아니면 배포를 미리 생각하고 있기 때문일 수도 있습니다. 또한, 나는 (Lambda preference over linq) 내 저장 스타일을 선택하기 때문에 코딩 스타일을 바꾸고 싶지 않습니다. 모든 것을 말하면 OODB는 새로운 것이므로 지금은 DB를 사용하여 엔티티를 배포하고 시간이 지남에 따라 내 방식을 찾으십시오. 감사! –

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

관련 문제