【问题标题】:WCF Update Service Reference no longer generating types for data contractsWCF 更新服务参考不再为数据协定生成类型
【发布时间】:2014-09-23 22:48:27
【问题描述】:

我有一个以前可以正常工作的 WCF 服务。每当我添加新的服务合同或数据合同时,我只需在我的客户端项目中右键单击服务引用并选择更新服务引用,它就会正常更新。

在今天之前,我最后一次更新服务参考是在 5 个月前,当时它更新得很好。今天,我在服务项目中添加了几个新的服务合同,并更新了客户端项目中的服务引用。发生的事情是服务生成得很好,但类型(来自数据合同)却没有。我的新服务参考中根本没有类型。我所拥有的只是服务本身和调用服务合同的函数。

这是我的服务参考正常工作时的样子:

这是现在的样子:

认为我在过去 5 个月中一定是不小心破坏了服务中的某些内容,所以我回到源代码管理并在我上次成功更新服务参考的那天检查了服务项目的旧版本。客户。我重建了服务项目,然后更新了我的服务参考,但它没有修复它。我仍然没有类型。

如果我返回并在客户端项目中检查旧版本的服务引用本身,那么我会恢复类型。但是,这对我没有帮助,因为我需要添加新的服务合同并让它生成一个新的更新的工作服务合同。

我搜索了其他有同样问题的人,我发现有人说他们通过取消选中服务配置中的“在引用的程序集中重用类型”来修复它。我试过了,但它不仅没有恢复我的类型,而且还删除了服务本身。

可能是什么原因造成的?

请记住,我已经回到了旧版本的服务项目,从它工作的时候开始,它并没有修复它,所以它不应该与我在我的服务合同或数据合同定义。它必须位于我的解决方案或 Visual Studio 配置中的其他位置。

只有最近发生的一件大事可能会有所启发。我最近开始与另一位开发人员合作,我们正在通过源代码管理共享解决方案。我正在使用 Visual Studio 2012 Pro,而他正在使用 Visual Studio 2013 Ultimate。他的 Visual Studio 版本是否可以对在我的版本中导致此问题的解决方案做些什么?如果有,是什么?

更新:

我在解决方案中创建了一个新的 Windows 窗体项目,并将服务项目也复制到其中。我在服务的主项目中添加了一个服务引用,它工作正常。这与以前在同一台开发机器上。所以,我想问题是:我的原始项目可能有什么问题,我该如何解决?

【问题讨论】:

  • 我建议您首先检查您新创建的数据合同中是否正确定义了 KnownTypeAttribute 标签?
  • 是的,所有数据合约都有 KnownTypeAttribute。
  • 尝试在新机器中添加您的服务参考。我的意思是任何其他具有相同先前配置的视觉工作室的机器。如果错误仍然存​​在,那么它可能是您的源代码中的问题,否则它完全是与环境相关的问题
  • 几个月前我遇到过类似的巫毒教问题。我也尝试了您所做的所有事情,但我还检查了在我的服务端点上手动运行 svcutil 是否按预期工作,并且确实如此。我注意到的另一件事是,在不同的解决方案(全新的解决方案)中将服务引用添加到不同的项目也可以正常工作。最终,问题在特定的机器和特定的解决方案上消失了。
  • Roman,我尝试了你所做的,并且它在新解决方案中有效(请参阅上面的更新。现在我只需要找出如何修复我的原始项目。

标签: c# wcf visual-studio-2012 visual-studio-2013 datacontract


【解决方案1】:

好的,我终于能够解决它。我所要做的就是清理解决方案。右键单击解决方案资源管理器中最顶部的解决方案节点,然后选择“清洁解决方案”。之后,我对服务项目进行了“全部重建”。最后,我在客户端应用程序中对服务引用进行了“更新服务引用”,然后用我的所有类型正确更新了它。仍然不确定发生了什么,但至少这清除了所有搞砸的小精灵。

【讨论】:

  • 很遗憾,经过进一步测试,这似乎只是一个临时解决方案。如果我之前立即清理解决方案,我只能正确生成参考。如果我做任何其他工作然后再次生成它,它会回到不再生成类型。这意味着每次我想重新生成服务引用时,我都必须先清理解决方案。虽然这可行,但我真的很想完全解决它。有什么想法吗?
  • 尝试手动清理(删除所有 bin、obj 文件夹),同时删除服务引用,然后重启机器,然后重新添加 :)(我不是在开玩笑,我不知道我或我团队中的任何人做了什么来消除这种情况)。
【解决方案2】:

我遇到过类似的问题。

假设您的服务从命名空间My.Services 定义了类SomeDto。 如果引用您的服务的代码还引用了来自My.ServicesSomeDto 类,则Visual Studio 不包含来自服务引用的类型,例如SomeDto 在命名空间My.Code.ServiceReference

解决办法是去掉My.Services的代码引用,然后更新服务引用,最后重新添加My.Services的引用。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2013-03-08
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多