【问题标题】:Transferring subclasses with WCF使用 WCF 传输子类
【发布时间】:2013-03-13 18:32:56
【问题描述】:

我在使用 WCF 传输子类时遇到了一点问题。 我想创建一个通用的“反馈”类,并从反馈中继承:成功类和失败类(失败有错误代码和描述)。这应该使客户端能够执行以下操作:

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);

但是在我接收这些课程的“客户”应用程序中,我只发现“反馈”作为一个课程,“成功”和“失败”无处可寻。

有人知道我做错了什么吗?我是否应该在 DataContracts 中定义不同的“成功”和“失败”类,因为它们是“反馈”的子类?

提前致谢。

【问题讨论】:

    标签: c# wcf class inheritance


    【解决方案1】:

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

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

    另见MSDN reference

    【讨论】:

    • 非常好,这确实有效,感谢MSDN参考,对我帮助很大。
    【解决方案2】:

    代理生成器将客户端的类结构展平。解决这个问题的一些方法:

    共享库

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

    部分类

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

    例子:

    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.    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多