2012-04-30 61 views
1

我認爲這是一個奇怪的問題,我有,我在服務器端定義了幾個類,然後通過服務引用引用,其中兩個正在工作,因爲他們應該是。我已經指定了已知類型的服務接口:從WCF服務返回服務器端類

[ServiceKnownType(typeof(Obj))] 
[ServiceKnownType(typeof(DigitalObject))] 
[ServiceKnownType(typeof(AnalogueObject))] 
[ServiceKnownType(typeof(AttributeType))] 
[ServiceKnownType(typeof(AttributeData))] 

從Silverlight應用程序,然後我通過引用類:

private ServiceReference.AttributeData commonData = new ServiceReference.AttributeData(); 

這是工作正常,但是我這樣做究竟有同樣的事情另一類,唯一的區別是名爲AnalogueObjectDigitalObject的類是從Obj類型的類派生的。你有什麼想法發生了什麼?命名空間都是一樣的,我已經重建了Web解決方案並更新了服務參考。

Example類:

using System.ComponentModel; 

namespace CapCon2 
{ 
    public class Obj : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged;  
     private string _Description; 
     public string ID { get; set; }  
     public string Description 
     { 
      get { return _Description; } 
      set 
      { 
       _Description = value; 
       NotifyPropertyChanged("Description"); 
      } 
     }  
     public void NotifyPropertyChanged(string name) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(name)); 
      } 
     } 
    } 
} 

    public class AttributeData : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private string _Description; 

    public string ID { get; set; } 

    public string Description 
    { 
     get { return _Description; } 
     set 
     { 
      _Description = value; 
      NotifyPropertyChanged("Description"); 
     } 
    } 

    public string Attribute { get; set; } 

    public string DataType { get; set; } 

    public string Input_InputSource { get; set; } 

    public string Output_OutputDest { get; set; } 

    public void NotifyPropertyChanged(string name) 
    { 
     if (PropertyChanged!= null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 
+3

什麼是錯誤或問題?你不清楚問題是什麼? – SliverNinja

+0

對不起!問題在於,'Obj'上面的類不能從silverlight項目中引用,並且從它派生的類也不能。然而,兩個不同的類可以,但我不能看到它們之間的任何區別。 –

+0

請分享示例代碼('AttributeData' /'AttributeType')作爲比較 – SliverNinja

回答

1

如果你要通過服務器和客戶端之間的複雜類型,那麼你應該與DataContract屬性標記它與DataMember標誌其性質。這將告訴.NET序列化對象並將其傳遞給SOAP消息。

+2

正確,但不完全正確。 DataContract(和DataMember)幫助定義服務合同中使用的類型。 WCF將不包含類型定義,除非該類型已在至少一個服務操作中使用 - 即使該類型已使用DataContract屬性標記。 –