Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 向外部系统公开服务-我应该如何设计合同?_Wcf_Messaging - Fatal编程技术网

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

Wcf 向外部系统公开服务-我应该如何设计合同?,wcf,messaging,Wcf,Messaging,我知道以前有人问过这个问题,但我仍然不确定该选择什么 我的服务将从企业的多个三方系统中调用。我几乎可以肯定,该服务将收集的信息(MyBigClassWithAllInfo)将在产品生命周期内发生变化。暴露对象仍然是个好主意吗 这基本上就是我的两个选择: [ServiceContract] public interface ICollectStuffService { [OperationContract] SetDataResponseMsg SetData(SetDat

我知道以前有人问过这个问题,但我仍然不确定该选择什么

我的服务将从企业的多个三方系统中调用。我几乎可以肯定,该服务将收集的信息(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文件如下所示:

... ...

有没有想过应该如何实现这项服务


感谢Larsi

如果信息在生命周期中会发生变化,但您需要在那里获取一些信息,我只需创建一条消息,其中包含一个变体类型列表,可以随消息类型版本号一起发送。。您的总线可以查看版本号并对其进行适当的路由。这样,使用旧版本消息的客户就不必更改他们正在使用的消息接口。

好吧,您完全正确(关于枪)。我不知道你在说什么?建议我使用一些常规字段1、字段2、字段3以及messagetype字段吗?目前,我的服务将收集大约30个字段,我希望它会增长。是的。因此,您向世界公开的内容将类似于hashmap。然后,一旦您整理了这种开放式xml结构,就可以根据传入的消息版本验证字段、类型等