2009-08-03 58 views
5

我有一个WCF服务,我试图在我的一个操作合同中返回一个List(其中IWatchable是我构建的自定义接口)。当我在客户端上测试服务时,该方法返回object[]而不是List<IWatchable>。是否有可能返回一个IWatchable列表,因为IWatchable是一个与WCF的接口?如何通过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 

和三个concre从IAMRAWatchable TE实现:

public class InstrumentationWatch: IAMRAWatchable 
public class OutputWatch: IAMRAWatchable 
etc... 

在返回List<IWatchable>我想送一个InstrumentationWatchOutputWatch到客户端我的WCF方法......这是可能的,或者我要对这个错误的方式?


解决

感谢约翰,我发现我的解决方案。 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

您是如何创建客户端的(从头开始/ svcutil /添加服务参考)? – 2009-08-03 05:13:02

+0

我尝试了两个结果相同的结果 – DennyFerra 2009-08-03 05:20:56

回答

9

接口不能被序列化。这只是对行为的描述。

你可以序列化实现接口的对象,但是你必须告诉WCF他们的类型是什么。见Data Contract Known Types