我创作了一个WSDL和实现AddCar操作的消费者/客户端,它具有模型和颜色的数据.现在,一个WS生产者/服务器也希望拥有长度数据.我认为其他生产商由于实施外包而难以适应这种变化.我的选择包括:
>进行新操作AddCarWithLength
>使用相同的操作制作2个版本的WSDL和消费者代码
>只需使用可选长度更新WSDL,并仅为需要它的生产者包含操作数据.
>只需使用0-N name-vaue对元素更新WSDL,并仅为需要它的生产者包含操作数据.
>要求客户他们让实施WS生产商的公司更新它.
选项:
>是不可能的
>我在使用者/客户端生成了C#类,因此会有两个代码集.我仍然必须知道(可能使用config参数或smthn)版本生产者/服务器使用的版本
>意味着我只需知道与之交谈的生产者/服务器.
>与3相同,但将来可以扩展
>可能有问题
题:
在要求所有生产者进行更新时,做到这一点的正确/最佳方法是不现实的?
解决方法
WSDL以珍贵的定义而闻名.首先,服务应始终设计为清晰的使用情况和未来.无论如何,现在我的理解是向现有的WCF服务添加一个属性(数据元素 – 长度).我的建议是,
>分析并添加您的自定义类,并将其命名为数据协定,并添加到WCF操作并将其作为新的接口/操作合同公开.
例如.
在Class car中,有一个数据成员作为Properties.
使用in属性定义所有分析结果元素,如长度,宽度,颜色,重量等.
还要添加一个Dictionary< string,string> CustomAttributes;所以将来你可以使用它.
>与上面类似,但如果你没有太多时间.没有任何分析只需添加一个字典< string,string>参数;并公开新合同并利用它.