2013-03-05 95 views
1

我有下面的類,我想從我的WCFC#)服務發送給我的客戶(WPF):在客戶端未初始化DataContract類

[DataContract] 
    public class OutputAvailableEventArgs 
    { 
     [DataMember] 
     public int ID { get; set; } 
     [DataMember] 
     public string Message { get; private set; } 
     [DataMember] 
     public bool IsError { get; private set; } 

     public OutputAvailableEventArgs(int id) : this(id, false, "") { } 

     public OutputAvailableEventArgs(int id, string output) : this(id, false, output) { } 

     public OutputAvailableEventArgs(int id, bool isError, string output) 
     { 
      ID = id; 
      IsError = isError; 
      Message = output; 
     } 
    } 

它使用的服務如下:

var channel = OperationContext.Current.GetCallbackChannel<IClientCallback>(); 

channel.OutputAvailable(new OutputAvailableEventArgs(1, false, "some message")); 

在客戶端,成員獲取其默認值。
我試着用IsRequired屬性標記它們,但現在客戶端上的OutputAvailable未被調用。在服務端的代碼似乎運行順利(我沒有注意到任何與調試器)。

如何在保持會員價值的同時將DataContract班級轉入WCF
(我看到,建議使用OnSerializedOnDeserialized解決方案,但我不需要只是一個默認的構造函數)。

+0

如果可能,請使用fiddler查看Service返回的內容以及客戶端收到的消息中的內容。 – jags 2013-03-05 09:29:01

回答

2

我看到了這個問題很多不同的解決方案。對於其他人的緣故,我會寫下他們中的一些+對我來說什麼:

  1. 看來,在某些情況下指定項目的順序解決了問題。詳情請參閱this SO question
  2. 如果它是一些默認的初始化,您可以使用OnSerializedOnDeserialized方法調用您的初始化方法。
  3. 我也試過在我的DataMember上使用IsRequired屬性,但仍沒有得到我的對象。

對我來說有效的是adding NameSpace property,DataContract屬性。顯然,爲了讓合約被視爲相等,您必須將DataContract上的Namespace屬性設置爲雙方相同的值。

相關問題