WCF 서비스를 제공하는 Entity Framework (4.1)를 사용하여 웹 사이트를 만들고 WCF를 통해 서버와 통신하는 Silverlight 클라이언트가 있습니다. 프록시/래퍼 등의 클래스를 생성하지 않고이없는 을 WCF 서비스를 통해 일부 엔티티를 보내고 (그리고 수신 할 수 있도록) 싶습니다. 예를 들어 Username, Password, Email 필드가있는 User
엔티티 유형이 있고 실제로이 기능을 더 많이 유지하기 위해 단축되었습니다.이 개체를 Silverlight 클라이언트로 보내려고합니다. 사용자 이름과 이메일을 보내는 동안 나는 (분명히) Password 속성을 클라이언트에 보내지 않기를 바란다. 이제는 속성이 [Serializable]
이고 속성이 [DataContract]
인 래퍼를 작성 중이며 [DataMember]
특성을 가진 필드가 있습니다. 필요한 필드 만 포함하고 새 인스턴스를 만들고 엔터티 개체의 값을 복사 한 다음 프록시 개체를 보냅니다. 그것은 효과가 있지만 불편하고 극도로 고통 스럽습니다. 내가 원하는 속성을 직접 설정할 수 있고 단순히 다른 것을 노출시키지 않는 메커니즘이 필요합니다. EDMX를 터치 할 때마다 엔티티 모델 코드가 자동으로 재생성되므로 속성을 추가/편집하기 위해 코드를 변경할 수 없습니다. 선택한 멤버 만 클라이언트에 공개하는 방법이 있습니까?WCF를 통해 엔터티를 직접 전송하는 방법
2
A
답변
2
클라이언트에서 PROXY 엔터티를 피하려면 클라이언트가 이미 서버 엔터티 어셈블리를 참조하는지 확인하여 동일한 엔터티 (클라이언트 및 서버 측)를 재사용 할 수 있습니다 (POCO를 EF에 매핑 한 후 분리 한 것으로 가정). 자신의 집합으로). 그런 다음 서버 참조에서 고급 옵션을 확인하고 "참조 된 어셈블리의 유형 재사용"이 선택되어 있는지 확인하십시오.
그러면 프록시 인터페이스와 클라이언트가 만들어 지지만 서버 엔터티는 다시 사용됩니다.
서비스 참조 대신 일반 ClientBase<>을 사용하여 프록시 인터페이스를 피할 수 있지만 서비스 측 인터페이스 (서비스 계약 인터페이스)를 별도의 어셈블리로 제거하고 두 클라이언트에서이를 참조해야합니다. 및 서버.
귀하의 관찰에 따라 귀하의 개체에 [DataMember]로 표시하지 않으면 일련 화되지 않습니다. 같은 엔티티를 양쪽 모두 가지고 있기 때문에, 같은 필드는 클라이언트의 기본값 (0, null 등)으로 나옵니다.
+0
좋은 해결 방법이지만, 노출되지 않은 멤버에 대한 기본값/null 값을 갖는 것은 좋은 프로그래밍 습관은 아니지만 그 내용을 살펴 보겠습니다. –
관련 문제
- 1. WCF를 사용하여 큰 파일을 전송하는 방법
- 2. WCF를 사용하여 파일을 전송하는 중
- 3. ORM을 사용하는 경우 계층간에로드 된 엔터티를 안전하게 전송하는 방법
- 4. WCF를 통해 개체를 노출하는 방법?
- 5. WCF를 통해 MemoryStream을 스트리밍하는 방법
- 6. ASMX에서 응용 프로그램 서비스를 감싸거나 WCF를 통해 직접 노출 하시겠습니까?
- 7. WCF를 통해 개체 노출
- 8. WCF를 통해 일반 객체를 전달하는 방법
- 9. 자바를 사용하여 네트워크를 통해 객체를 전송하는 방법
- 10. iPad에서 USB를 통해 데이터를 전송하는 방법
- 11. UDP를 통해 파일을 전송하는 가장 빠른 방법
- 12. 다른 서버에서 내 서버로 직접 파일을 전송하는 방법
- 13. WCF를 통해 들어오는 XML을 살균하기
- 14. 관련된 엔터티를 포함하는 방법
- 15. WCF를 사용하여 많은 양의 데이터를 전송하는 방법은 무엇입니까?
- 16. NHibernate 기준 API를 통해 고유 한 엔터티를 검색하는 방법?
- 17. REST 및 JAX-RS를 통해 부모 - 자식 엔터티를 모델링하는 방법
- 18. Linq2Sql을 Wcf를 통해 직렬화 - 버그 또는 오해?
- 19. Entity SQL을 통해 엔터티를 채울 수 있습니까?
- 20. DTD 엔터티를 통해 외부 xml 파일 참조
- 21. iC없이 wcf를 호스트하는 방법
- 22. HTTP를 통해 XML을 전송하는 중 문제가 발생했습니다.
- 23. 프로젝트간에 dll을 전송하는 방법
- 24. 안전하게 전송하는 방법
- 25. 데이터를 프린터로 전송하는 방법
- 26. 플로트를 직렬로 전송하는 방법
- 27. 랜을 통해 비트 맵 객체를 전송하는 가장 좋은 방법
- 28. 다른 데이터 소스에서 데이터를 수신하고 JMS를 통해 데이터를 전송하는 방법
- 29. 인터넷을 통해 데이터를 전송하는 가장 쉬운 방법, Python
- 30. Android : 블루투스 연결을 통해 비디오 및 오디오를 전송하는 방법?
좋은 질문입니다! 자신의 사용자 정의 POCO를 드러내는 것이 내가하는 방법을 알 수있는 유일한 방법입니다. – Jay
제이와 동의합니다. 필요한 [DataMembers] 만 포함하는 [DataContract] 특성으로 장식 된 DTO 클래스를 만들어야합니다. EF 생성 엔티티에서 DTO로 매핑해야합니다. –
글쎄, 좋아, 그럼, 나는 내가하고있는 것처럼가는 것과 같은 방식으로 계속하고있다. 나는 그게 최선의 방법이라고 확신하고 싶었다. 나는 그 대답을 받아 들일 수 있었다. 대답은 어쨌든 :) –