WCF服务向后兼容性检查

6
我刚写了一个新版本的WCF Web服务,我想确保在服务和数据契约方面没有做出任何破坏性的更改。
回想起作为VB6 Com Api开发人员的日子,我记得指定组件以前发布的版本是多么容易,在编译时让编译器检查是否维护了二进制兼容性。
我设想有一个类似的东西叫做(希望)“合同兼容性”检查。它将使用元数据执行类似于VB6开发环境所做的检查。这可以作为单独的构建步骤完成,该步骤将执行实用程序。
我准备接受不存在这样的实用程序的事实。如果是这种情况,有人有关于如何实现此算法的任何想法吗?
1. 从当前活动服务版本检索元数据。 2. 从新的服务版本检索元数据。 3. 检查服务契约和每个数据契约的兼容性。仅报告破坏性更改。
第三步似乎很复杂,但肯定可以自动化...

2
如果存在兼容性问题,您可以使用服务契约的命名空间进行版本控制,并保留两个版本,直到确定旧版本不再使用为止。 - Cylon Cat
4个回答

4

这些情况可以通过集成/回归测试来解决。您可以为初始版本编写集成测试,然后在修改服务为新版本后,再次使用旧客户端运行集成测试。如果测试成功,则表示没有出现问题。如果测试失败,则可以看到导致问题的具体调用。


1
好主意。那就可以解决问题了。如果静态检查不可行,那么运行时检查将是下一个最好的选择。谢谢。 - Andy McCluggage

1

Andy,没有类似的工具,但如果你能运行两个DLL(一个老的和一个新的),那么你可以使用BitDiffer之类的工具来比较它们。

在Codeplex上有一个项目可以帮助WCF版本控制,但我不记得叫什么了,抱歉。

祝好运,

-Keith


您可以尝试使用 ApiChange、LibCheck 或 NDepend 工具来比较两个 DLL。 - linuxbuild


0

尝试使用"Codeplex WCF Load Test"生成旧接口合同的单元测试,并在新接口上运行它们:

该工具需要一个WCF跟踪文件和一个WCF客户端代理或WCF接口合同,并生成一个C#单元测试,以重放跟踪文件中发现的相同调用序列。然后可以使用该单元测试来对目标进行负载测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接