在WCF服务中传递接口?

时间:2008-11-21 20:54:25

标签: c# .net wcf

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

这有效:

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

但这不是:

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

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

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

3 个答案:

答案 0 :(得分:20)

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

[ServiceKnownType(typeof(ConcreteDeviceType)]

答案 1 :(得分:9)

谢谢,当我改变它时它会起作用:

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

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

答案 2 :(得分:1)

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

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