什么是在WCF

时间:2017-08-03 17:13:55

标签: web-services wcf

我想在WCF中使用继承的类型,但我不想在基类中添加所有类型的KnownType属性,因为基类在另一个程序集中,也是为了避免依赖。 那么,实现这一目标的另一种方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为至少有两种方法可以做到这一点。

  1. 您可以创建自己的类(DTO)并将其他程序集中的数据映射到您的类。对于映射,您可以使用AutoMapper。它具有以下优点:

    • 您的通信层是从您的逻辑中划分出来的(我假设这个其他程序集包含逻辑)
    • 您将决定您的API的样子,并且您的协议在您不知情的情况下不会更改(我在此假设此其他程序集是库或其他人负责)。
  2. 您可以或多或少地将ServiceKnownType添加到您的ServiceContract界面(我没有测试代码):

    [DataContract]
    public class BaseClass {}
    
    [DataContract]
    public class DerivedClass : BaseClass  {}
    
    [ServiceKnownType(typeof(BaseClass))]
    [ServiceKnownType(typeof(DerivedClass))]
    [ServiceContract()]
    public interface IYourContract
    {
        [OperationContract]
        BaseClass[] GetClasses();
    }
    

    有关详细信息,请查看文档here。有很好的例子。

  3. 哪个更好?

    这取决于你需要什么。如果您正在开发原型或需要快速执行某些操作,请选择选项2.如果您需要更可靠的解决方案,那么选择选项1将会更长时间。

答案 1 :(得分:1)

有更多方法可以指定已知类型。其中之一是将它们放在配置文件中。这样,您的服务在编译时就无法了解它们。但是为了序列化它们,它必须在运行时了解它们。

相关问题