使用WCF传输子类

时间:2013-03-13 18:32:57

标签: c# wcf class inheritance

使用WCF传输子类时遇到一些问题。 我想创建一个通用的“反馈”类,并从反馈中继承:Succes-class和Failure-class(失败有错误代码和描述)。这应该使客户能够做这样的事情:

If (myWCFclient.authenticate(user, password) is Succes)
{
..
}

在我的WCF数据交换中,我这样定义:

[DataContract]
public class Feedback : IFeedback
{ 
}

[DataContract]
public class Succes : Feedback
{
}

[DataContract]
public class Failure : Feedback
{
    [DataMember]
    public int errorCode { get; set; }
    [DataMember]
    public String description { get; set; }
}

这很有效,我的操作合同如下:

[OperationContract]
Feedback Authenticate(String email, String password);

但在我的'客户'应用程序中,我收到这些课程时,我只发现'反馈'作为一个类,'Succes'和'Failure'无处可寻。

enter image description here

有人知道我做错了什么吗?我应该在我的DataContracts中定义那些不同的“Succes”和“Failure”类,因为它们是“反馈”的子类吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

有几种方法可以解决这个问题。我认为以下方式最适合您:

[DataContract]    
[KnownType(typeof(Success))]
[KnownType(typeof(Failure))]
public class Feedback : IFeedback
{ 
}

另见MSDN reference

答案 1 :(得分:0)

代理生成器使客户端的类结构变得扁平化。解决这个问题的一些方法:

共享资料库

在客户端和服务器之间创建共享库,这样您就不必生成代理。这可能不是一种“纯粹”的服务方法,但至少你不必每次都生成代理。

部分课程

客户端代理创建为部分类。您可以创建接口并在其他分部类文件中实现它们。

示例:

public partial class MyProxy : IFeedback
{
   //you won't have to add code here if the members of IFeedback line up with your data member names.    
}