SOAP webservice方法返回不同的类型

时间:2017-07-09 22:50:08

标签: c# web-services soap

我们的webservice必须返回不同的类型,这些类型可能有一个基本类型,但具有一些共享属性,但具有不同的属性。

方法可能如下所示: CreateObject(int typeID)

并且取决于typeID,将返回不同类型的对象。如果这不是web服务,那么IOC容器就可以解决问题。但在我们的场景中,对象必须由服务创建,并且实际上将被用作另一个服务,然后将该对象传递给业务层。

我们试图避免大量的映射,如果可能的话,只能在一个地方定义对象类型。

在这种情况下要寻找的好设计模式是什么?

1 个答案:

答案 0 :(得分:0)

这样的伎俩(当然这可以通过IOC等来进行nicyified),我缺少的那个是" KnownType"属性:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    AbstractResult GetAbstractData(int id);
}

[DataContract]
[KnownType(typeof(ConcreteResult1))]
[KnownType(typeof(ConcreteResult2))]
public abstract class AbstractResult
{
    [DataMember]
    public int ID { get; set; }
}

[DataContract]
public class ConcreteResult1 : AbstractResult
{
    [DataMember]
    public string Name { get; set; }
}

[DataContract]
public class ConcreteResult2 : AbstractResult
{
    [DataMember]
    public int Number { get; set; }
}

服务方法的简单示例:

public class Service1 : IService1
{

    public AbstractResult GetAbstractData(int id)
    {
        if (id == 1)
            return new ConcreteResult1() { ID = 1,  Name = "red" };
        else
            return new ConcreteResult2() { ID = 2,  Number = 123 };
    }
}