2010-03-30 3 views
1

방금 ​​분산 환경을 처리하기 위해 WCF 서비스가 필요한 새 프로젝트를 시작했습니다. 나는 여전히 물건을 구현하는 최선의 방법을 찾고있다.버전 3.0의 NHibernate & WCF

나는 NHibernate를 사용하고 싶다. 그러나 나는 직렬화를 다루는 몇 가지 다른 방법을 보았다. 3.0에서 처리됩니까? 트럭 내부에 wcf_context가 있음을 알았습니다. D

누군가가 올바른 방향으로 나를 가리킬 수 있습니까?

모두 감사합니다.

답변

0

WCF를 사용하여 지연로드 된 개체를 전달할 수 없습니다.

주위 몇 가지 방법이 있지만, 그 외에는

, 그들은만큼 당신이 정의로, 함께 행복하게 떠날 APR (2010 년 출시 예정) 다음 WCF 버전에서 수정 될 예정 버그가 있습니다 rigth DataContract가있는 객체입니다.

목록의 직렬화에 문제가 있습니다. 특정 플래그가있는 svcutil을 사용하여 프록시를 생성해야합니다. 그렇지 않으면 (목록이 배열이되고 항목을 더 추가 할 수 없습니다.) (특정 WCF와 NHibernate가 동의하는 종류의 목록) - look up (Nhiberate 및 WCF Lists) -

3

일반적으로 서비스에서 데이터를 반환하려는 경우 용도에 맞는 클래스를 반환해야합니다. WCF 세계에서 해당 서비스 호출, DTO (데이터 전송 객체) 또는 DataContract와 관련된 것을 포함하는 서비스의 일부입니다.

엔티티와 DTO 간의 매핑에 특히 유용한 도구는 AutoMapper입니다. AutoMapper를 사용하든, 아니면 "왼쪽에서 오른쪽으로"코딩하든 관계없이 매핑을 수행하면 실행이 지연되므로 지연된 실행 지연 문제가 발생하지 않습니다.

는 서비스에서 엔티티를 반환하는 좋은 생각을하지 않을 수 있습니다 이유가 있습니다, 여기 당신의 영속에 따라

  • (이 대부분에 대한 다양한 의견이있다) 몇 가지 (귀하의 경우 nhib) 당신은 다른 응용 프로그램이나 서버에서 올바르게 실행되지 않는 행위 (지연된 실행) 또는 귀하의 엔티티에 부착 된 상태 일 수 있습니다.
  • 서비스 계층의 엔티티 결과를 반환하면 종종 CRUD- like, 매우 혼잡 한 서비스 계층, 매우 un-SOA가 발생합니다.
  • 다른 호출은 더 많은 정보가 필요할 수 있습니다. DTO는 필요한 것보다 정확히 포장 할 수있는 기능을 제공합니다.
  • 재사용 가능한 서비스 계층을 구축하려는 경우 클라이언트가 서비스에있는 것 이외의 엔티티 또는 도메인 논리에 액세스 할 수 있다고 가정하면 안됩니다. 다른 앱이나 다른 언어 등으로 작성 될 수 있습니다. 데이터를 이동하는 데 사용하는 엔티티가 엔티티 인 경우이 것을 잊어 버릴 수 있습니다.
+0

이 질문이 얼마나 오래된 지 깨달았습니다. 죄송합니다. 오. – Brook

+0

솔직히 오늘 나에게 유용했다. :) – Mayo