2009-08-03 5 views
5

WCF 서비스를 사용하여 작업 계약 중 하나에서 List (IWatchable은 내가 작성한 사용자 지정 인터페이스)를 반환하려고합니다. 클라이언트에서 서비스를 테스트 할 때이 메서드는 List<IWatchable> 대신 object[]을 반환합니다. IWatchable이 WCF와의 인터페이스이기 때문에 IWatchable 목록을 반환 할 수 있습니까?WCF를 통해 <Interface>리스트를 전달하려면 어떻게해야합니까?

방법 :

public List<IWatchable> GetWorkload(Guid nodeId, int maximum) 

IWatchable :

public interface IWatchable 
{ 
    string ActionName { get; set; } 
    Guid ActionReference { get; set; } 
} 

다행스럽게도 필자는 파생 인터페이스가 추가 정보를 원하시면 도움이 될 것입니다 조금 ...

:

public interface IAMRAWatchable: IWatchable 

을 그리고 3 개의 concre IAMRAWatchable에서 테 구현 :

List<IWatchable>은 내가 InstrumentationWatch 및 클라이언트에 OutputWatch를 보낼 반환 나의 WCF 방법에
public class InstrumentationWatch: IAMRAWatchable 
public class OutputWatch: IAMRAWatchable 
etc... 

...이게 가능이나 내가 잘못된 방향으로 이것에 대해 갈거야?


내가 내 해결책을 발견 존에

감사를 해결. KnownType은 내가 사용하고 나서 작동하지 않았다. List<IWatchable> - 그래서 나는 내 목록을 새로운 클래스로 싸고 속성을 추가했다. 난 내 코드를 팩터 다시해야하지만 여기에 관심이있는 사람들을위한 클래스입니다 :

[DataContract] 
[KnownType(typeof(InstrumentationWatch))] 
[KnownType(typeof(OutputWatch))] 
public class WorkInfo 
{ 
    [DataMember] 
    public List<IWatchable> WorkQueue { get; set; } 
} 

는 내 WCF 방법 : 인터페이스가 직렬화 될 수 없다

public WorkInfo GetWorkload(Guid nodeId, int maximum) 
+0

클라이언트를 어떻게 만들었습니까 (scratch/svcutil/Add Service Reference에서)? –

+0

두 결과 모두 동일하게 시도했습니다. – DennyFerra

+0

KnownTypes 속성을 어떻게 구현했는지 보여 주시겠습니까? –

답변

9

. 행동에 대한 설명 일뿐입니다.

인터페이스를 구현하는 객체를 직렬화 할 수 있지만 WCF에 유형이 무엇인지 알려야합니다. Data Contract Known Types을 참조하십시오.

+0

KnownType 특성을 시도했지만 여전히 문제를 해결할 수 없습니다. 아마도 제가 제공 한 추가 정보는 정확한 문제를 해결하는 데 도움이 될 것입니다. 감사 – DennyFerra

관련 문제