Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用WCF传递子类_C#_Wcf_Class_Inheritance - Fatal编程技术网

C# 用WCF传递子类

C# 用WCF传递子类,c#,wcf,class,inheritance,C#,Wcf,Class,Inheritance,我在用WCF传输子类方面有点问题。 我想创建一个通用的“feedback”类,并从feedback子类:Succes类和Failure类(Failure有一个错误代码和描述)。这将使客户端能够执行以下操作: If (myWCFclient.authenticate(user, password) is Succes) { .. } [OperationContract] Feedback Authenticate(String email, String password); 在我的WCF

我在用WCF传输子类方面有点问题。 我想创建一个通用的“feedback”类,并从feedback子类:Succes类和Failure类(Failure有一个错误代码和描述)。这将使客户端能够执行以下操作:

If (myWCFclient.authenticate(user, password) is Succes)
{
..
}
[OperationContract]
Feedback Authenticate(String email, String password);
在我的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; }
}
这很有效,我的运营合同如下:

If (myWCFclient.authenticate(user, password) is Succes)
{
..
}
[OperationContract]
Feedback Authenticate(String email, String password);
但在我的“客户”应用程序中,我收到了这些类,我只发现“反馈”作为一个类,“成功”和“失败”都找不到

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


提前感谢。

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

共享库

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

部分类

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

例如:

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

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

共享库

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

部分类

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

例如:

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

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

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

另请参见

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

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

另请参见

非常好,这确实有效,感谢MSDN参考,帮助了我很多。非常好,这确实有效,感谢MSDN参考,帮助了我很多。