WCF合同返回接口可能导致序列化问题?

时间:2009-01-06 13:13:10

标签: wcf serialization interface

我正在尝试定义一个返回接口的WCF合约,如下所示:

[ServiceContract]
public interface IMyContracts
{
    [OperationContract]
    IMyInterface GetData(string request);
}

为了实现这一点,我认为我的接口(IMyInterface)必须实现ISerializable以确保可以序列化实现我的接口的类。这意味着我必须为实现我的接口的任何类手动实现序列化。

如果使用的是不可序列化的类,或者我使接口实现ISerializable并且具有相关的手动实现麻烦,那么我似乎使用我的接口并冒险运行时错误。

我是否在困惑自己并错过了一些明显的东西?其他人如何使用WCF返回接口并避免此问题?

非常感谢。

2 个答案:

答案 0 :(得分:14)

AFAIK,问题不在于序列化,而在于您正在返回抽象实体(接口)。抽象是一个OO概念,而不是SOA概念。因此,您的客户端的wcf堆栈可能不知道如何处理接口后面的类。如果客户端不知道接口背后的类,该怎么办?客户端的WCF堆栈必须反序列化它,要做到这一点,它必须知道类。

因此,您必须通过KnownTypeAttribute在合同的界面部分后面创建课程。

您也可以使用似乎更灵活的ServiceKnownTypeAttribute课程。不过,请记住,客户必须知道类型,否则您将获得例外。

答案 1 :(得分:0)

在这篇文章中,我将详细介绍如何使WCF用于接收和返回派生类和接口。

http://codeonaboat.wordpress.com/2010/03/01/serializing-and-deserializing-derived-types-or-interfaces-in-wcf/