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