【问题标题】:WCF Service Backwards Compatibility CheckWCF 服务向后兼容性检查
【发布时间】:2009-03-19 18:03:38
【问题描述】:

我刚刚编写了一个新版本的 WCF Web 服务,我想确保我没有对服务和数据合同进行任何重大更改。

回想我作为 VB6 Com Api 开发人员的日子,我记得在编译时指定组件的先前发行版本并让编译器检查二进制兼容性是多么容易。

我设想了类似的东西,称为(希望)“合同兼容性”检查。它将使用元数据执行与 VB6 开发环境类似的检查。这可以作为执行实用程序的单独构建步骤来完成。

我准备接受不存在这样的实用程序。如果是这种情况,是否有人对实现这一目标的算法有什么想法?

  1. 从当前实时服务版本中检索元数据
  2. 从新服务版本中检索元数据
  3. 检查服务合同和每个数据合同的兼容性。仅报告重大更改。

第 3 步看起来很复杂,但肯定可以自动化...

【问题讨论】:

  • 如果存在兼容性问题,您可以使用服务合同的命名空间进行版本控制,并保持两个版本都可用,直到您确定不再使用旧版本。

标签: wcf web-services metadata versioning backwards-compatibility


【解决方案1】:

这些情况可以通过集成/回归测试来解决。您为初始版本编写集成测试,并在将服务修改为新版本后使用旧客户端再次运行集成测试。如果他们成功了,你就不会破坏任何东西。如果他们失败了,你会确切地看到是什么调用导致了问题。

【讨论】:

  • 好点。这样就行了。如果无法进行静态检查,那么运行时检查将是下一个最佳选择。谢谢
【解决方案2】:

Andy 不存在这样的东西,但如果你启动并运行了一些东西,你有 2 个 DLL(一个旧的,一个新的),那么你可以使用 BitDiffer 之类的东西来比较它们。

Codeplex 上有一个项目帮助 WCF 发布,但我不记得它叫什么了,抱歉。

祝你好运,

-基思

【讨论】:

  • 您也可以尝试使用 ApiChange、LibCheck 或 NDepend 工具比较 2 个 DLL。
【解决方案3】:
【解决方案4】:

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

此工具采用 WCF 跟踪文件和 WCF 客户端代理或 WCF 接口协定,并生成 C# 单元测试,该测试重放在跟踪文件中找到的相同调用序列。然后可以使用单元测试对目标进行负载测试。

【讨论】: