首页 文章

隐藏WCF中的派生类

提问于
浏览
1

我想在我的WCF服务中隐藏客户端的派生类 .

示例 -

[DataContract]
public class Base
{
    public int Id {get; set;}
}

public class Derived : Base
{         
    public string Name {get; set;}
}

让我们说我的运营 Contract 就像

[OperationalContract]
Base GetData();

执行业务 Contract

public Base GetData()
{
    Derived = new Derived {Id = 1, Name = "Foo" };
    return derived;
}

上面的例子不起作用 . 如果我在Base类中添加[KnownType(typeof(Derived)],并将DataContract属性添加到Dervied类,那么一切似乎都能正常工作 . 但是如果我这样做,客户端将看到Derived类,我想隐藏它 . 是吗可以从客户端隐藏Derived类吗?谢谢

1 回答

  • 2

    我认为你会使用命名的DataContracts而不是添加KnownType属性来获得你想要黑客等效的行为,如下所示:

    [DataContract(Name="Reply")]
    public class Base
    {
        [DataMember]
        public virtual int IntValue { get; set; }
    
    }
    
    [DataContract(Name = "Reply")]
    public class Derived : Base
    {
    
        public String StringProperty { get; set; }
    }
    
    
    
    Derived blah = new Derived { IntValue = 3, StringProperty = "blah" };
    public Base SomeOperation()
    {
         return blah;
    }
    

    这样做你想要的吗?另请参阅DataContractSurrogates(http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/14/wcf-extensibility-serialization-surrogates.aspx),这些都是WCF支持zimdanen所说的一种奇特的方式 - 为您的API创建一个类型,并以较少的"hacky"方式将您的内部类型转换为此API类型 .

相关问题