2011-08-17 47 views
4

的情況是:如何訪問WCF中的繼承對象屬性?

[ServiceContract] 
public interface IInfo 
{ 
    [DataMember] 
    int Id{get;set;} 
} 

[DataContract] 
[KnownType(typeof(Legal))] 
public class Info 
{ 
    [DataMember] 
    public int Id { get; set; } 
} 

[DataContract] 
public class Legal : Info 
{ 
    [DataMember] 
    public string ManagerName { get; set; } 
} 

[ServiceContract] 
[ServiceKnownType(typeof(Legal))] 
public interface IMyService 
{ 
    [OperationContract] 
    int DoWork(Info dto); 
} 

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class MyService : IMyService 
{ 

    public int DoWork(Info dto) 
    { 
     string name; 
     if (dto is Legal) 
      name = (dto as Legal).ManagerName; 
     return dto.Id; 
    } 
} 

是否有可能知道DTO的法律類型和訪問子屬性?

我想存儲dto,我不想爲每個孩子的信息有很多服務。

傳遞泛型服務無法正常工作,WSDL錯誤, 接口如IInfo作爲輸入參數不工作,鑄造錯誤,像信息 基類沒有工作,孩子的道具是無法訪問, 棧溢出不起作用,這是我第二次發佈這個概率,但沒有答案!

+0

您是否試圖承載該服務,而不管您在WCFHost-Tool中遇到哪些錯誤?在一些複雜的情況下,這個工具對你是「撒謊」的。如果你將它部署到IIS,例如一切正常。我會盡快嘗試你的樣品!敬請關注。 – sprinter252

+0

嘗試過你的樣品。這個對我有用。你的示例代碼是否工作,你不想做別的事情?你能發佈一個不適合你的樣本嗎? – sprinter252

+0

這是我的確切樣本夥計!我會盡快在iis上嘗試,建議。任何郵件地址? –

回答

1

我將一個json作爲dto傳遞給MyService。 如果我添加「__type」:「Legal:#Dto」,MyService將dto識別爲Legal。 然後(dto爲Legal).ManagerName具有值

此解決方案正在運行,實際上傳遞__type並不方便。我會感謝你的更好的建議。