C# 在WCF服务中传递接口?

C# 在WCF服务中传递接口?,c#,.net,wcf,C#,.net,Wcf,我正在试验WCF服务,遇到了一个传递接口的问题 这项工作: [ServiceContract] public interface IHomeService { [OperationContract] string GetString(); } 但这并不是: [ServiceContract] public interface IHomeService { [OperationContract] IDevice GetInterface(); } 当我尝试编译客

我正在试验WCF服务,遇到了一个传递接口的问题

这项工作:

[ServiceContract]
public interface IHomeService
{
    [OperationContract]
    string GetString();
}
但这并不是:

[ServiceContract]
public interface IHomeService
{
    [OperationContract]
    IDevice GetInterface();
}
当我尝试编译客户端时,GetInterface方法失败。我得到一个异常,它不能将对象转换为IDevice


在客户端上,IHomeService类正确地实现了GetString,并将字符串作为其returntype,但GetInterface的returntype为object。为什么不是IDevice?

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

[ServiceKnownType(typeof(ConcreteDeviceType)]

谢谢,当我这样更改它时,它工作正常:

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

我还从这个站点获得了帮助:

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

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

对不起,我想我不明白。假设我希望GetInterface方法返回两个不同的类,SimpleDevice和AdvancedDevice,这两个类都实现了IDevice接口。然后我应该为这两种类型设置ServiceKnownType吗?反序列化时,WCF如何知道IHomeService的实现类型?是的,我想你已经知道了。您正在告诉WCF实现接口的可能类型。你可以传递任何类型,只要WCF知道这些已知类型实现了接口,并且是可序列化的。Link现在是404,但是一些搜索引擎有它的cachedFrode:你不认为@Brian真的回答了你的问题吗?