我试图定义一个返回接口的WCF合约,如下所示:
[ServiceContract] public interface IMyContracts { [OperationContract] IMyInterface GetData(string request); }
为了实现这一点,我认为我的接口(IMyInterface
)必须实现ISerializable
以确保可以序列化实现我的接口的类.这意味着我必须为实现我的接口的任何类手动实现序列化.
如果使用的是不可序列化的类,或者我使接口实现ISerializable
并且具有手动实现的相关麻烦,那么我似乎使用我的接口并冒险运行时错误.
我迷惑自己,错过了一些明显的东西吗?其他人如何使用WCF返回接口并避免此问题?
非常感谢.
AFAIK,问题不在于序列化,而是因为你正在返回抽象实体(一个接口).抽象是一个OO概念,而不是SOA概念.因此,您的客户端的wcf堆栈可能不知道如何处理接口后面的类.如果客户端不知道接口背后的类,该怎么办?客户端的WCF堆栈必须反序列化它,并且要做到这一点,它必须知道该类.
因此,您必须通过KnownTypeAttribute将类放在合同的接口部分后面.
您也可以使用似乎更灵活的ServiceKnownTypeAttribute类.不过,请记住客户端必须知道类型,否则您将获得异常.