2013-03-13 5 views
0

WCF로 하위 클래스를 전송할 때 약간의 문제가 있습니다. 일반적인 'feedback'클래스를 만들고 피드백에서 하위 클래스로 만들려고합니다 : Succes-class 및 Failure-class (오류 코드 및 설명 있음). 이 같은 것을 할 클라이언트를 사용하도록 설정해야합니다 : 내 작업 계약과 같이, 이것은 아주 잘 작동WCF로 하위 클래스 전송

[DataContract] 
public class Feedback : IFeedback 
{ 
} 

[DataContract] 
public class Succes : Feedback 
{ 
} 

[DataContract] 
public class Failure : Feedback 
{ 
    [DataMember] 
    public int errorCode { get; set; } 
    [DataMember] 
    public String description { get; set; } 
} 

:

내 WCF의 datacontracts에서

If (myWCFclient.authenticate(user, password) is Succes) 
{ 
.. 
} 

을, 나는 이런 식으로 정의

[OperationContract] 
Feedback Authenticate(String email, String password); 

하지만 내 '클라이언트'응용 프로그램에서는 클래스를 수신 할 때 '피드백'만 클래스로 'Succes'및 'Failure'를 찾을 수 없습니다.

enter image description here

는 아무도 내가 잘못 알고 있습니까? 'Feedback'을 상속 받기 때문에 DataContracts에서 'Succes'및 'Failure'클래스를 다르게 정의해야합니까?

미리 감사드립니다.

답변

0

프록시 생성기는 클라이언트 측의 클래스 구조를 평평하게 만듭니다. 이 주변에 어떤 방법 : 당신이 프록시를 생성 할 필요가 없습니다

공유 라이브러리

는 클라이언트와 서버 사이에 공유 라이브러리를 작성합니다. 이것은 서비스에 대한 "순수한"접근 방식이 아닐 수도 있지만 최소한 매번 프록시를 생성 할 필요는 없습니다.

부분 클래스

프록시는 부분 클래스로 생성 된 클라이언트 측. 인터페이스를 생성하고 추가 부분 클래스 파일로 구현할 수 있습니다.

예 :

public partial class MyProxy : IFeedback 
{ 
    //you won't have to add code here if the members of IFeedback line up with your data member names.  
} 
5

는이 문제를 해결하는 방법은 여러 가지가 있습니다.

[DataContract]  
[KnownType(typeof(Success))] 
[KnownType(typeof(Failure))] 
public class Feedback : IFeedback 
{ 
} 

MSDN reference

+0

아주 좋은이 실제로 수행 작업도 참조 MSDN 참조에 대한 감사, 나에게 많은 도움이 : 나는 다음과 같은 방법이 최선이라고 생각합니다. –

+0

답변을 표시하고 질문을 닫을 수 있습니다. – Slava