2013-03-13 114 views
0

我用WCF传输子类时遇到了一些问题。 我想创建一个通用的'反馈'类,并从反馈中分类:Succes-class和Failure-class(失败包含错误代码和描述)。这将使客户端能够做这样的事情:使用WCF传输子类

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

在我的WCF datacontracts,我定义它是这样的:

[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'类,因为它们是“反馈”的子类?

在此先感谢。

回答

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

有解决这个几个方面。我认为,以下方式是最适合你的:

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

又见MSDN reference

+0

非常好,这确实工作,感谢MSDN参考,对我帮助很大。 – 2013-03-13 19:28:56

+0

您可以标记答案并关闭问题。 – Slava 2013-03-13 19:46:40