在WCF服务中传递接口?

我正在尝试使用WCF服务,并且遇到了传递接口的问题。

这有效:

[ServiceContract] public interface IHomeService { [OperationContract] string GetString(); } 

但这不是:

 [ServiceContract] public interface IHomeService { [OperationContract] IDevice GetInterface(); } 

当我尝试编译客户端时,它在GetInterface方法上失败。 我得到一个exception,说它无法将Object转换为IDevice。

在客户端上,IHomeService类正确地使用字符串实现GetString,因为它是返回类型,但GetInterface具有返回类型的对象。 为什么不是IDevice?

您需要告诉WCF序列化程序使用哪个类来序列化接口

 [ServiceKnownType(typeof(ConcreteDeviceType)] 

谢谢,当我像这样改变时,它可以工作:

 [ServiceContract] [ServiceKnownType(typeof(PhotoCamera))] [ServiceKnownType(typeof(TemperatureSensor))] [ServiceKnownType(typeof(DeviceBase))] public interface IHomeService { [OperationContract] IDevice GetInterface(); } 

我也从这个网站得到了帮助: http : //www.thoughtshapes.com/WCF/UsingInterfacesAsParameters.htm

我最初尝试将接口传递给WCF方法,但无法使用此线程提供的答案使代码工作。 最后,我重构了我的代码并将抽象类传递给方法而不是接口。 我通过使用基类的KnownType属性来实现这一点,例如

 [DataContract] [KnownType(typeof(LoadTypeData))] [KnownType(typeof(PlanReviewStatusData))] public abstract class RefEntityData : EntityData, IRefEntityData