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