2013-03-13 50 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