【发布时间】:2013-09-13 20:58:10
【问题描述】:
我想在我的 WCF 服务中对客户端隐藏派生类。
例子-
[DataContract]
public class Base
{
public int Id {get; set;}
}
public class Derived : Base
{
public string Name {get; set;}
}
假设我有类似的运营合同
[OperationalContract]
Base GetData();
运营合同的实施
public Base GetData()
{
Derived = new Derived {Id = 1, Name = "Foo" };
return derived;
}
上面的例子不起作用。如果我在 Base 类中添加 [KnownType(typeof(Derived)] 并将 DataContract 属性添加到 Derived 类,那么一切似乎都正常。但是如果我这样做,客户端将看到我想隐藏的 Derived 类。是可以对客户隐藏 Derived 类吗?谢谢
【问题讨论】:
-
在返回之前投到 Base 是否有效?或者您可以将其映射到基础(手动或自动创建一个新基础并复制数据)。
-
它抛出“尝试序列化参数tempuri.org/:DerivedResult时出错”。第二个建议是我想避免的黑客攻击。
-
从技术上讲,如果您要分离数据合同和实体,允许您解耦并将 WCF 转换为实现细节,这不仅不是黑客但它也是免费提供给你的。您将在多种实体类型和一种数据协定类型之间进行映射。