从返回基类的SOAP方法调用时,是否可以返回继承的类详细信息?

时间:2014-07-01 22:06:48

标签: c# web-services logging soap

我想知道将数据返回到客户端的最佳方法是什么,其中数据在某种程度上是相似的。我们要求允许客户端通过SOAP方法连接到我们的软件,并且我们将返回发生在特定对象上的所有“事件”。

例如,在在线商店中,事件可能是将项目添加到购物篮,下订单,支付订单。在此示例中,我们的软件将使用以下类结构:

public class Event
{
    public Guid Id { get; set; }
    public DateTime EventTime { get; set; }
    public string Username { get; set; }
    public string Message { get; set; }
}

public class ProductEvent : Event
{
    public string ProductId { get; set; }
}

public class OrderEvent : Event
{
    public ICollection<Product> Products { get; set; }
    public string OrderId { get; set; }
}

目前我们可以创建可能如下所示的xml文件

<Events>
    <ProductEvent>
        <Id>0000-0000-0000-0000</Id>
        <EventTime>01-01/-0001T00:00:00</EventTime>
        <Username>User</Username>
        <Message>Added to basket</Message>
        <ProductId>00001</ProductId>
    </ProductEvent>
    <ProductEvent>
        <Id>0000-0000-0000-0000</Id>
        <EventTime>01-01/-0001T00:00:00</EventTime>
        <Username>User</Username>
        <Message>Added to basket</Message>
        <ProductId>00002</ProductId>
    </ProductEvent>
    <OrderEvent>
        <Id>0000-0000-0000-0000</Id>
        <EventTime>01-01/-0001T00:00:00</EventTime>
        <Username>User</Username>
        <Message>Added to basket</Message>
        <OrderId>000001</OrderId>
        <Products>
            <ProductId>00001</ProductId>
            <ProductId>00002</ProductId>
        </Products>
    </OrderEvent>
</Events>

是否可以通过SOAP从一个方法返回此类数据,或者是否需要为每个事件类型分别使用单独的方法?

即。我可以使用SOAP调用返回IList<Event>的方法返回类似于上面的内容吗?

有没有比这更好的方法来实现事件记录?我能想到的唯一方法是让Event类包含Description属性中的所有信息,这会使搜索变得非常困难,因为您必须搜索写入文本的属性?

修改

应该提到,当尝试返回IList<Event>时,内容可能来自Event,导致客户端出错:

An existing connection was forcibly closed by the remote host

有没有办法做我正在尝试的事情,或者如果没有,那么有更好的方法或设计模式可以遵循。

0 个答案:

没有答案