【发布时间】: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