在 WCF 合约中标记已弃用的字段
我有一个适用于客户端 v1 的 wcf 合同。
现在我正在开发服务 v2,我想将某些字段标记为已弃用,因此客户端 v1 将看到并使用它们,而客户端 v2 将忽略它们。
对于这个问题有什么最佳实践吗? WCF 中是否有我应该使用的现有属性?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我同意@Aliostad 的观点,即您一般不应从服务合约中删除操作,因为它会引入重大更改,因此应避免在单一版本的 API 中使用。
但是,如果您想通知客户/消费者一些计划的更改或有任何其他需要在运营合同中添加某些“额外”信息,您可以查看 IWsdlExportExtension 接口,创建一个实现它的自定义属性并注释特定操作。
您可以查看这个文章详细参考。
I agree with @Aliostad that you shouldn't remove operations from the service contract in general as it introduces breaking change and as such should be avoided in single version of API.
However, if you want to inform client/consumer about some planned changes or have any other need to add certain "extra" information to the operation contract, you might take a look at IWsdlExportExtension interface, create a custom attribute that implements it and annotate particular operations.
You may take a look at this article for detailed reference.
您可以将旧属性装饰为
[Obsolete]
,但客户端只有在使用 DLL 引用而不是服务/Web 引用 (WSDL) 时才会看到它们。[已过时]
装饰不会传递给使用 WSDL 生成代理的客户端。就 WCF 版本控制而言,一旦发布了接口,就无法删除任何方法,或者根据合同,您实际上不应删除任何属性。如果您希望新客户端使用它们,您可以发布新接口并创建单独的 DTO 类。
参考:过时属性。
You can decorate your old properties as
[Obsolete]
but the client will only see them if they use a DLL reference and not service/web reference (WSDL).[Obsolete]
decoration will not be passed to the client that uses WSDL to generate the proxy.In terms of WCF versioning, once you have published an interface, you cannot remove any methods or in terms of contract you should really not remove any properties. You can publish a new interface and create a separate DTO class if you want new clients to use them.
Ref: Obsolete Attribute.
在我们这边,我们通常通过名称空间对操作进行版本控制。当一个操作被弃用时,我们只需在描述中添加一个弃用注释,客户端可以通过 wsdl 看到该注释。我们通知客户并让他们了解已弃用的操作及其到期日期。
On our side we usually version the operatiom via namespace. When an operation is deprecated we just put a deprecation comment in the description which the client can see through the wsdl. We notify our clients and let them know about the deprecated operations and when its expiration date is going to be.