向外部系统公开服务 - 我应该如何设计合同?

时间:2009-09-25 10:54:17

标签: wcf messaging

我知道here之前已经问过这个问题,但我仍然不确定要选择什么。

我的服务将从企业中的许多3方系统调用。我几乎肯定服务将收集的信息(MyBigClassWithAllInfo)将在产品生命周期中发生变化。暴露对象仍然是个好主意吗?

这基本上是我的两个选择:

    [ServiceContract]
public interface ICollectStuffService
{
    [OperationContract]
    SetDataResponseMsg SetData(SetDataRequestMsg dataRequestMsg);
}

// Alternative 1: Put all data inside a xml file
[DataContract]
public class SetDataRequestMsg
{
    [DataMember]
    public string Body { get; set; }
    [DataMember]
    public string OtherPropertiesThatMightBeHandy { get; set; } // ??
}
// Alternative 2: Expose the objects
[DataContract]
public class SetDataRequestMsg
{
    [DataMember]
    public Header Header { get; set; }
    [DataMember]
    public MyBigClassWithAllInfo ExposedObject { get; set; }
}

public class SetDataResponseMsg
{
    [DataMember]
    public ServiceError Error { get; set; }
}

xml文件如下所示:

<?xml version =“1.0”encoding =“utf-8”?> <消息> <页眉和GT; < InfoAboutTheSender> ...< / InfoAboutTheSender> < /页眉和GT; < StuffToCollectWithAllTheInfo> < stuff1> ...< / stuff1> < / StuffToCollectWithAllTheInfo> < /消息>


有关如何实施此服务的任何想法?

感谢Larsi

1 个答案:

答案 0 :(得分:0)

如果信息在生命周期中会发生变化,但是您需要在那里获得一些信息,我只需创建一条消息,其中包含可以与消息类型版本号一起发送的变体类型列表。您的公交车可以查看版本号并进行适当的布线。这样,使用旧版本消息的客​​户就不必更改他们正在使用的消息界面。